개발일기

[정보처리기사 실기 이론정리7] 객체 지향 설계 본문

정보처리기사 도전기

[정보처리기사 실기 이론정리7] 객체 지향 설계

츄98 2024. 7. 27. 15:41

1. 객체 지향 언어 특징 :

  • 캡슐화(Encapsulation) : 속성과 속성을 조작하는 매서드를 하나로 묶은 것
  • 정보은닉(Information Hiding) : 다른 객체들이 객체의 내부 데이터에 직접 접근할 수 있도록 제한, 오직 공개된 메서드를통해서만 내부 상태에 접근할 수있게 한다.
  • 상속(Inheritance) : 상위 클래스의 모든 속성과 메서드를 하위 클래스가 물려받는 것
  • 다형성(Polymorphism) : 하나의 메시지에 대해 각 객체가 가지고 있는 여러 가지 방법으로 응답할 수있는 개념
  • 추상화(Abstraction) : 실체의 핵심적인 개념만을 추출하여 간결한 형태로 표현

2. 객체 지향 설계 원칙 SOLID:

  • 단일 책임 원칙(SRP) : 한 클래스는 하나의 책임만을 가져야 한다.
  • 개방 폐쇄 원칙(OCP) : 소프트웨어 엔티티는 확장에 대해서는 열려있어야 하지만, 수정에 대해서는 닫혀 있어야 한다.
  • 리스코프 치환 원칙(LSP) : 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다.
  • 인터페이스 분리 원칙(ISP) :  자신이 사용하지 않는 인터페이스에 의존하지 않아야 한다.
  • 의존성 역전 원칙(DIP) : 구체적인 클래스보다 인터페이스나 추상 클래스와 의존 관계를 맺어야 한다. 상위 모듈은 하위 모듈에 의존해서는 안 되며, 양쪽 모두 추상화에 의존해야 한다는 것을 의미

3. 디자인패턴 : 객체지향 프로그래밍 설계를 할 때 자주 발생하는 문제들에 대해 재사용할 수 있도록 만들어놓은 패턴들의 모음

4. GoF 디자인 패턴

5. 생성패턴

  • 추상 팩토리(Abstract Factory) : 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴, 연관성이 있는 객체 군이 여러 개 있을 경우 이들을 묶어 추상화하고 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현
  • 빌더(Builder) : 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만듦
  • 팩토리 메서드(Factory Method) : 객체 생성을 서브클래스로 위임하여 캡슐화함, Virtual-Constructor 패턴
  • 프로토타입(Prototype) : 원본 객체를 복사함으로써 객체를 생성 
  • 싱글톤(Singleton) : 어떤 클래스의 인스턴스는 하나임을 보장하고 어디서든 참조할 수 있도록 함

6. 구조패턴

  • 어댑터(Adapter) : 클래스의 인터페이스를 다른 인터페이스로 변환하여 다른 클래스가 이용할 수 있도록 함
  • 브리지(Bridge) : 구현부에서 추상층을 분리하여 각자 독립적으로 확장할 수 있게 함
  • 컴포지트(Composite) : 객체들의 관계를 트리 구조로 구성하여 복합 객체와 단일 객체를 구분없이 다룸
  • 데코레이터(Decorator) : 주어진 상황 및 용도에 따라 어떤 객체에 다른 객체를 덧붙이는 방식
  • 퍼사드(Facade) : 서브시스템에 있는 인터페이스 집합에 대해 하나의 통합된 인터페이스를 제공(Wrapper) 
  • 플라이웨이트(Flyweight) : 크기가 작은 여러 개의 객체를 매번 생성하지 않고 가능한 한 공유할 수 있도록 하여 메모리를 절약함
  • 프록시(Proxy) : 접근이 어려운 객체로의 접근을 제어하기 위해 객체의 대리나 대체글을 제공

7. 행위패턴

  • 책임연쇄(Chain of Responsibility) : 한 객체가 처리할 수 없는 요청을 다음 객체로 전달하는 방식
  • 커맨드(Command) : 실행될 기능을 캡슐화함으로써 주어진 조건을 만족하는 기능을 실행할 수 있는 유연성 제공
  • 인터프리터(Interpreter) : 주어진 언어에 대해 그 언어의 문법에 대한 표현을 정의하고 해당 언어를 해석하는 해석자를 위한 패턴
  • 반복자(Iterator) : 객체 내부 구조를 노출시키지 않고도 그 원소들에 접근할 수 있는 방법을 제공
  • 중재자(Mediator) : 객체 간의 복잡한 상호작용을 캡슐화하고, 객체들이 서로 직접 참조하지 않도록 중재자 객체를 통해 통신하도록 한다.
  • 메멘토(Memento) : 객체의 상태 정보를 저장하고 필요에 따라 이전 상태로 복원할 수 있는 기능을 제공
  • 옵서버(Observer) : 객체의 상태 변화가 있을 때마다 메서드를 통해 객체가 직접 목록의 각 관찰자에게 통지하도록 함
  • 상태(State) : 객체의 내부 상태에 따라 동일한 작업이 상태에 따라 다르게 작동하도록 상태를 객체로 표현
  • 전략(Strategy) : 알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 만든다.
  • 템플릿 메서드(Template Method) : 상위 클래스는 알고리즘의 골격만을 작성하고, 구체적인 처리는 서브클래스로 위임
  • 방문자(Visitor) : 객체 구조를 이루는 원소에 대한 연산을 정의하는 데 사용되는 패턴, 개방-폐쇄 원칙(OCP)를 적용