먼저 클린 코드에 대한 개념을 먼저 챙길텐데 많은 설명보단 직관적이고 굵은 설명이 더 낫겠다고 판단하여 올리겠다.


먼저 두 자연수의 합을 출력해주는 프로그램을 작성한다고 가정을 한다.


a16711aa372a76b660b8f68b12d21a1dd48bd633

이런 코드는 보기가 좋은 코드가 된다.


다만, 자연수 라는 조건에 대해서 경계에 벗어난 값을 부여하면 결과가 올바르지 않지만, 제대로 연산을 수행되었다고 볼 수 있다.


자 그러면 클린한 것뿐만 아니라 객체지향답게 조금씩 첨가해서 코드를 작성한다고 해보자.


a16711aa372a76b660b8f68b12d21a1dd483de34c8


a와 b에 대한 변수는 외부에서 쉽게 접근할 수 없도록 private 기능을 처리하였다.

오로직 함수를 이용해서 값을 재할당하거나 호출할 수 있다. 즉, 생성자 함수를 통하거나 set 프로시저를 통해서 만들어야 한다.

이것이 객체지향적으로 풀어쓴 것이다.


그리고,

자연수임을 알고 있으므로, 예외처리를 추가하자. 그리고 add함수도 구현해놓는다.



a16711aa372a76b660b8f68b12d21a1dd283d635c8



그러면 Operation클래스를 호출하여 add를 하기 전에 먼저 생성자를 통해 a와 b가 자연수인지 체크하는 것이다.

자연스럽게 생성자 함수에서 예외검사를 해주기 때문에 나머지 함수를 작성할 때 예외처리를 생각할 필요가 없는 것이다.

즉 초기화를 할 때, 조건들을 미리 넣어두면 나머지 기능을 만들어 붙일 때, 고려하지 않아도 되는 것이다.

객체지향 페러다임 중 은닉화, 캡슐화에 대한 개념이다.


이제 예외처리를 깔끔하게 했으니, 호출해본다.


a16711aa372a76b660b8f68b12d21a1dd686da37c9'


참 깔끔해 보인다.

그치?


근데 전체적으로 보면?



a16711aa372a76b660b8f68b12d21a1dd584d935c7


쓸데없는 버퍼들 최대한 지워보면 클래스를 만드는데 19줄이 된다.


아까 맨 위의 사진을 보자.


a16711aa372a76b660b8f68b12d21a1dd581dc31

단 3줄로 깔끔하고 직관적인데, 객체지향적이지 않다.


이 점에 대해서 3줄의 소스코드 vs 19줄의 소스코드

어느쪽이 객관적이고 유연한가? 주관적이고 빠른가?로 갈라지게 된다.


자 여러분들은 이 점에 대해서 어떻게 생각하는지 직접 댓글로 어필해봐라.