티스토리 뷰

SOLID

객체 지향 설계시 사용되는 SOLID라는 원칙이 있다. 각 원칙의 첫글자를 따서 만든 SOLID에 대해서 알아보자.

단일 책임 원칙

단일 책임 원칙(SRP, Single Responsibility Principle)은 클래스를 변경해야 할 이유는 한 가지여야 한다는 원칙이다. 간단히 말하면 하나의 클래스는 하나의 책임만 가져야 한다라는 원칙이다.

개방 폐쇄 원칙

개방 폐쇄 원칙(OCP, Open Closed Principle)은 소프트웨어 구성 요소는 확장에 관해서는 열려 있어야 하고, 변경에 대해서는 닫혀 있어야 한다라는 원칙이다. 간단히 말하면 변하지 않는 부분(닫힌 부분)과 변하는 부분(열린부분)을 분리하자는 것이다. 개방 폐쇄 원칙은 상속과 이양을 이용해서 구현할 수 있다.

리스코프 치환 원칙

리스코프 치환 원칙(LSB, Liskov Substitution Principle)은 파생 자료형은 기본 자료형과 치환할 수 있어야 한다라는 원칙이다. 간단히 말하면 자식 클래스는 부모 클래스 자리에 치환되어도 정상적으로 작동해야 한다는 것이다. 정확한 상속 관계가 구현되어 있다면 이 원칙을 위반되지 않는다. 상속 관계가 복잡해지면 이 원칙을 위반하는 클래스가 만들어 질 가능성이 크다. 상속보다는 이양을 우선한다라는 것을 꼭 기억하자.

인터페이스 분리 원칙

인터페이스 분리 원칙(ISP, Interface Segregation Principle)은 클라이언트가 사용하지 않는 멤버 함수의 의존을 클라이언트에 강요하면 안 된다라는 원칙이다. 간단히 말하면 클래스 사용자에게 불필요한 인터페이스를 공개하지 말라는 원칙이다. 멤버 함수가 많은 큰 클래스일수록 이러한 원칙을 위반하는 경우가 많다. 멤버 함수가 많으면 그만큼 복잡한 역할을 수행할 가능성이 크다. 필요한 조작만 사용하도록 한정하면 불필요하고 복잡한 부분을 분리할 수 있다.

의존 관계 역전 원칙

의존 관계 역전 원칙(DIP, Depondency Inversion Principle)은 상위 모듈은 하위 모듈에 의존하지 않는다. 두 모듈 모두 별도의 추상화된 것에 의존한다라는 원칙이다. 상위 모듈이란 사용하는 측, 하위 모듈은 사용되는 측의 모듈을 가르킨다. 보통 상위 레벨 모듈은 하위 레벨 모듈을 이용해서 만들어진다. 그런데 상위 모듈이 하위 모듈에 직접 결합해버리면, 하위 모듈의 변경이 상위 모듈에 영향을 미치게 된다. 이때 의존 관계 역전 원칙을 이용하여 사용자 측에 있는 상위 레벨 모듈의 요구에 맞춰 추상 인터페이스를 작성하여 하위 모듈을 이용하면 된다. 추상 인터페이스를 거쳐 하위 모듈을 사용하면 하위 레벨의 모듈과 직접적인 결합을 피할 수 있다. 따라서 하위 레벨의 모듈을 변경하거나 교환하기 쉬워진다.

데메테르 법칙

데메테르 법칙은 SOLID 원칙에는 없지만, 객체 지향 설계에서 매우 중요한 원칙이다. 테메테르 법칙을 최소 지식의 원칙이라고도 부르기도 하는데, 간단히 말해서 직접적인 친구와만 관련한다라는 것을 의미한다. 여기서 친구는 클래스를 나타내는데 '자기 자신', '자신이 가진 클래스', '매개 변수로 전달한 클래스', '멤버 함수 내부에서 실체화한 클래스'를 나타낸다. '친구의 친구 클래스' 또는 'singleton 패턴을 사용한 외부 클래스'와 결합하면 데메테르 법칙에 위반된다. 이렇게 직접적인 친구와만 관련되게 만들면 외부의 변경에 강한 코드가 된다. 다만 데메테르 법칙에 딱 맞게 설계하려다 보면 오히려 복잡해지는 경우도 있기 때문에 무조건 적용하기보다는 참고사항으로 생각하자.

디자인 패턴

디자인 패턴이란 과거에 작성항 객체 지향 프로그램에서 반복해 나오는 형태와 그 해결 방법에 이름을 붙여 패턴화한 것이다. 대표적인 디자인 패턴으로는 'GoF의 디자인 패턴 23개'가 있다. 그 외에도 수많은 디자인 패턴이 있다. 디자인 패턴은 장래의 확장성 또는 재사용성을 높이기 위한 패턴이 많은데, 어느 정도 규모가 있는 프로그램이 아닌 이상 장점을 느끼기 어려운 경우가 많다. 디자인 패턴은 여러 사람과 함께 클래스 설계할 때 사용하는 용어로도 사용할 수 있어서 좋다.

디자인 패턴을 익혔다고 해서 소규모 프로그램에 남용하는 일을 피하자. 우선 객체지향 설계 원칙을 중심으로 클래스를 설계하고 디자인 패턴을 도입해야 할 시점이 왔을 때, 디자인 패턴을 적용하도록 하자.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함