객체지향(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)
객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들에 대해 재사용할 수 있도록 만들어놓은 패턴들의 모음
디자인 패턴 구성요소
- 패턴의 이름과 유형
- 문제 및 배경
- 솔루션
- 사례
- 결과
- 샘플 코드
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 연산 분리하여 별도 클래스