객체지향(OOP, Object Oriented Programming) 설계

김덕근·2022년 12월 28일
0

정보처리기사

목록 보기
7/17

객체지향(OOP, Object Oriented Programming)

현실 세계의 유형, 무형의 모든 대상을 객체(Object)로 나누고, 객체의 행동(method)과 고유한 값(Attribute(속성))을 정의하여 설계하는 방법

객체지향 구성요소

1. 클래스(Class)

  • 유사한 종류의 유형/무형의 존재를 속성(멤버변수)과 연산(메서드)을 정의해서 만든 틀
  • 다른 클래스와 독립적으로 디자인 한다.
  • 데이터를 추상화 하는 단위

2. 객체(Object)

  • 클래스의 인스턴스
  • 객체는 자신의 고유한 속성을 가지며, 클래스에서 정의한 연산을 수행
  • 객체의 연산은 클래스에 정의된 연산에 대한 정의를 공유함으로써 메모리를 경제적으로 사용

3. 속성(Attribute) == 멤버변수

  • 객체들이 가지고 있는 고유한 데이터를 단위별로 정의한 것
  • 성질, 분류, 수량, 현재 상태 등에 대해 표현한 값

4. 메서드(Method)

  • 어떤 특정한 작업을 수행하기 위한 명령문의 집합
  • 객체가 가지고 있는 속성들을 변경할 수 있는 하나의 연산

5. 메시지(Message)

  • 객체에게 어떤 행위를 하도록 지시
  • 객체의 메서드를 호출함으로써 객체 간의 상호작용을 할 수 있도록 한다.

객체지향언어의 특징

1.캡슐화(Encapsulation)
2.정보은닉(Information Hiding)
2.상속(Inheritance)
3.추상화(Abstraction)
4.다형성(polymorphism)


객체지향 설계원칙(SOLID)

1. 단일 책임 원칙(SRP, Single Responsibility Principle)

  • 한 클래스는 하나의 책임만을 가져야 한다.

2. 개방 폐쇠 원칙(OCP, Open-Closed Principle)

  • 확장에는 열려 있고, 수정에는 닫혀 있어야 한다.
  • 기존의 코드를 변경하지 않으면서(Closed), 기능을 추가할 수 있도록(Open)설계

3. 리스코프 치환 원칙(LSP, Liskov Substitution Principle)

  • 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다.
  • 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 작동해야 한다.

4. 인터페이스 분리 원칙(ISP, Interface Segregation Principle)

  • 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
  • 자신이 사용하지 않는 인터페이스 때문에 영향을 받아서는 안 된다.

5. 의존성 역전 원칙(DIP, Dependency Inversion Principle)

  • 의존 관계를 맺을 때 자주 변화하는 것보다 변화가 거의 없는 것에 의존해야 한다.
  • 구체적인 클래스보다 인터페이스나 추상 클래스와 의존 관계를 맺어야 한다.

디자인 패턴(Design Pattern)

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

디자인 패턴 구성요소

  1. 패턴의 이름과 유형
  2. 문제 및 배경
  3. 솔루션
  4. 사례
  5. 결과
  6. 샘플 코드

GoF(Gang of Four) 디자인 패턴

  • 23가지의 디자인 패턴을 정리
  • 각각의 디자인 패턴을 생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로 분류

생성(Creational)

  • Abstract Factory 인터페이스를 제공하는 패턴
  • Builder 동일한 생성절차에도 다른 표현 결과
  • Factory Method 위임하여 캡슐화
  • Prototype 원본 객체 복사
  • Singleton 인스턴스 하나임을 보장하고 참조

구조(Structural)

  • Adapter 변환
  • Bridge 분리하고 확장
  • Composite 트리구조
  • Decorator 덧붙이는 방식
  • Facade 통합된 인터페이스(Wrapper)
  • Flyweight 메모리 절약
  • Proxy 접근 제어, 대리나 대리글

행위(Behavioral)

  • Chain of Responsibility 객체를 연쇄적으로 묶어 요청
  • Command 재사용 취소 저장
  • Interpreter 특정 언어의 문법 표현
  • Iterator 순차적 접근
  • Mediator 상호작용을 캡슐화하여 새로운 객체로 정의
  • Memento 객체가 특정 상태로 되돌아감
  • Observer 객체 상태 변화
  • State 동일 동작을 다르게 처리
  • Strategy 알고리즘
  • Template Method 상위는 골격, 서브는 재정의
  • Visitor 연산 분리하여 별도 클래스
profile
안녕하세요!

0개의 댓글