객체 지향적 모델링과 네이밍
객체 지향적 모델링은 개발자에게 있어서 매우 중요한 기본 지식이지만 실무에서 거의 배울 기회가 없다. 사소해 보일 수 있지만 이름을 짓는 관행의 일관성을 확보하는 것은 모델링에 있어서 매우 중요한 단계이다.
클래스와 속성의 네이밍
클래스는 속성을 가지는데, 클래스와 속성을 어떻게 읽는 것이 맞는지 쉽게 해석할 수 있어야 한다. 코드는 논리적으로 읽혀야 하며, 클래스와 속성을 이어 읽었을 때 어색하거나 값 자체가 의도를 짐작하기 난해한지 확인해야 한다. 클래스의 네이밍은 지나치게 일반적인 이름은 피하는 것이 좋다. 클래스의 메서드의 정의는 읽기에도 직관적으로 이해하기 쉬운 코드여야 한다.
상속 관계의 네이밍
클래스의 상속 관계가 올바른지는 보통 부모와 자식 간에 ‘이즈-어(is-a)’ 관계가 성립하는지 검증해보는 방식으로 따진다. ‘자식
은 부모
(A is a B)이다’와 같은 말이 성립하는 것이 올바른 상속의 사용 예로 볼 수 있다.
상속의 의도는 명확해야 한다.
부모와 자식 간의 객체의 속성이 연관성이 있어야 하며, Protocol을 준수하여 사용 가능하거나 구현 객체를 직접 생성하여 상속의 의미가 없는 경우 상속이 정말 필요할지 생각해 볼 필요가 있다. 프로그래밍 언어란 컴퓨터에게 내릴 명령을 순서대로 정리해 놓은 문서라고 볼 수 있으며, 가장 중요한 특징 중 하나는 같은 구문이 두 가지 이상의 의미로 해석될 여지가 있어서는 안 된다. 다형성을 위해 써야 할 때가 아니면 가급적 구성(composition)을 사용하길 권장하고 있다.
클래스의 구성요소
중요한 구성요소는 속성(Attribute)과 행위(Behavior)다. 보통 속성은 멤버 변수로 그리고 행위는 메서드로 정의한다.
메서드의 이름은 명확해야 한다.
메서드의 이름만 봐서 기능을 알 수 있어야 한다.
하지만 일반적으로 잘못 정의된 메서드는 여러 기능들을 하나의 메서드에 합쳐놓은 경우다.
하나의 메서드가 여러 역할을 한다는 것은, 결국 하나의 기능이 여러 기능에 의존성을 가지고 있다는 것이고,
이런 코드들이 전형적으로 하나를 수정하면 모든 것이 무너지는 코드가 돼버린다.
또한 코드 리뷰시 리뷰어가 코드를 읽는 입장에서 메서드의 이름만 보고 유추하기 어려워지며, 기능이나 비즈니스 로직을 이해하기 어려워져 의견을 제시하기 힘든 경우가 생길 수 있다. 이러한 문제점을 해결할 방법으로 하나의 메서드가 5줄을 넘지 않게 만드는 방법도 고려할만하다.
댓글남기기