Home

[OOP] 객체지향 사고 프로세스 Chapter_2. 객체라는 관점에서 생각하는 방법

객체지향 사고 프로세스

객체지향 사고 프로세스

맷 와이스펠드 지음 / 박진수 옮김

JPUB

목차

객체라는 관점에서 생각하는 방법

객체지향 설계의 기본단위는 클래스이다. 객체지향 설계의 최종 결과는 강력하고 기능적인 객체 모델을 설계하는 것이다.

객체지향 설계를 할때는 특정 프로그래밍, 기술을 고려하지 말자. 가장 먼저 해야 하는 것은 개념을 분석하고 설계하는 일이다. 정말로 필수불가결한 경우에만 특정 기술을 고려하자.

객체지향 설계를 하려면 먼저 객체지향의 개념을 익히고 객체지향 방식으로 생각하는 과정을 익히는 일에 투자해야 한다.

인터페이스와 구현부의 차이점의 이해

클래스를 설계할때 중요한 점은 사용자가 알아야 할 사항과 사용자가 몰라야 할 사항을 잘 구분할 수 있어야 한다. (캡슐화)

운전을 할때 운전자가 차의 엔진 내부까지 알필요는 없다. 그냥 운전대를 어떻게 사용하는지만 알면 된다. 엔진 내부를 구현부라 말 할 수 있으며, 운전대는 인터페이스(접속부)라 할 수 있다.

구현부를 변경해도 운전자에게는 영향을 전혀 미치지 않아야 하지만, 인터페이스는 변경 될 수 있다.

인터페이스와 구현부라는 두 부분만으로 클래스를 설계해야 클래스가 제대로 합성이 된다.

인터페이스

최종 사용자에게 필요한 서비스만을 제공해야 한다. 즉 사용자가 알아야할 내용만 포함되어야 한다는 것이다.

public 메소드로 제공되는 코드가 인터페이스라고 할 수 있다. 다만 메소드 안의 코드는 구현부이다. 인터페이스는 함수를 호출할 수 있게 만드는 코드를 의미하지, 함수 자체를 의미하진 않는다.

즉 인터페이스로는 사용자가 객체를 보는 방식을 표현할 뿐이다.

구현부

구현부는 사용자에게 드러나지 않으며 구현부를 변경할지라도 사용자는 자신의 코드를 변경하지 않아도 되게 해야 한다.

public 메소드가 아닌 모든 코드가 구현부라 볼 수 있으며 이는 모두 사용자에게 완벽하게 감춰져 있어야 한다.

즉 객체의 실체적인 작동부를 의미한다.

래퍼(Wrapper)

레퍼 클래스는 라이브러리와 같은 바꿀수 없는 객체나 레거시 코드를 한범 감싸주어서 이를 새로운 객체로 만드는 것이다.

이를 통해 기존 코드는 수정하지 않고 새로운 인터페이스로 감싸줘서 사용할 수 있게 해준다.

인터페이스 설계 시 추상적으로 생각해 보기

객체지향 프로그래밍의 장점은 클래스를 재사용할 수 있다는 것인데, 일반적으로 재사용 가능한 클래스는 구성적이기 보다는 오히려 더 추상적인 인터페이스를 갖는 경향이 있다.

구상 인터페이스는 매우 구제적이지만, 추상 인터페이스는 더 일반적이다. 이러한 재사용 가능한 추상 클래스를 설계하는 것을 목표로 해야 한다.

가능한 한 사용자 인터페이스를 적게 제공하기

여러번 반복되지만 사용자에게는 최소한의 인터페이스만 제공해줘야 한다. 인터페이스의 갯수가 많아 진다면 이거는 설계가 잘못된 것이다. 유지보수를 위해서라도 클래스는 작게 설계되야 한다.

또한 클래스는 사용자 관점에서 설계되야 한다. 특정 기술 모델에 맞게 설계하는 것이 아니라 누가 사용하는지에 맞춰야 하는 것이다.

클래스와 인터페이스를 한번에 설계 하려 하지말자. 이를 정리하는 것은 반복과정이다.


위 정리글은 객체지향 사고 프로세스에서 인용한 것입니다.

[ISBN 979-11-90665-21-6]

Loading script...