객체 지향 설계 원칙 총정리
응집도를 높인다
1-1. 단일 책임 원칙
하나의 클래스는 하나의 기능만 가져야 한다. 그렇지 않다면 클래스를 분리한다
분리된 클래스끼리 위계 관계가 있다면 있다면 상속한다
1-2. 인터페이스 분리 원칙
특정 클라이언트는 클래스의 특정 기능만을 사용해야 한다
따라서 특정 클라이언트를 위한 특정 인터페이스를 정의한다
그리고 특정 클라이언트는 특정 인터페이스로 객체를 선언한다
객체 생성시에 구체 클래스를 쓰거나 추상 클래스를 쓴다
결합도를 낮춘다
2-1은
2-2와 2-3의 조합 즉, 추상성과 다형성으로 성취될 수 있다
2-1. 개방 폐쇄의 원칙
변경을 최소화하고 동시에 확장이 가능한 설계를 고려한다
이를 위해서 추상성과 다형성을 활용해야 한다
이를 통해서 결합도를 낮춘다
2-2. 의존성 역전의 원칙(추상성을 활용해서 확장에 대비하라)
A클래스가 B클래스를 참조할 때, B클래스가 확장 가능성이 있는지 고려한다.
확장 가능성이 높다면 A클래스와 B클래스의 결합도를 낮추기 위해 B클래스를 추상화한 인터페이스를 정의한다
이제 A클래스는 B클래스를 직접 의존하지 않고 인터페이스에 의존한다
만약 B클래스에서 C, D, E 클래스로 하위 모듈의 클래스가 확장된다면, 인터페이스를 상속하는 것으로 해결된다
만약 B클래스의 기능이 추가되어야 한다면, 인터페이스를 수정하고 하위 모듈에서 이 기능을 추가로 구현하면 된다
즉, A클래스의 변경이 최소화된다
2-3. 리스코프 치환 원칙(다형성이 가능하도록 하라)
클라이언트가 상속 관계의 객체를 사용할 때,
부모 객체를 자식객체로 변경해도 작동에 변화가 없도록 상속을 잘 해야 한다.
올바른 상속관계로 설계할 때, 객체를 사용하는 클라이언트는 다형성을 적용할 수 있다.
다형성이 적용된다는 뜻은, 자식 객체가 부모 객체의 메소드를 호출해도 그 응답 결과에 아무런 문제가 없다는 뜻이다.
결국, 엔지니어는 응집도를 높이고 결합도를 낮추는 방식으로 코드를 작성하면 된다!
위의 설계 원칙은 프로그램의 설계 단위를 객체로 바라보는 객체 지향 설계 원칙을 따른 것이다.
그러나 객체 지향은 객체끼리의 관계를 설계하기 위해서 응집도와 결합도를 잘 설계해야 하며,
이를 위한 원칙들을 활용하는 것에 상당한 숙련도를 필요로 한다.
이러한 단점을 극복하고자 함수형 프로그래밍이 도입되었다.
데이터의 관계는 최대한 단순화하고, 데이터의 변경은 순수함수로 관리하고, 복잡한 데이터의 변경은 함수의 조합으로 관리하며, 객체의 불변성을 통해서 데이터의 변화를 파악하는 방식으로 프로그래밍을 할 수 있다.
주로 게임은 객체 지향 방법론으로, 웹과 앱은 함수형과 객체지향의 조합인 멀티프로그래밍 방법론으로 구성되어 있음.
'게임 개발 학습 > CS' 카테고리의 다른 글
[CS] Getter Setter (0) | 2023.09.25 |
---|---|
[CS] Pure Function (0) | 2023.09.25 |
[CS] 객체 지향 설계 5원칙 (SOILD 원칙) (0) | 2023.09.25 |
[CS] 핵심 디자인 패턴 6가지 (0) | 2023.09.25 |