- Object Oriented Programming은 프로그래밍 방법론으로 기존의 절차적, 파일단위의 프로그래밍 스타일에서 완전히 분리된 프로그래밍 단위힌 Object(객체)라는 개념을 가지고 와서 프로그래밍 의 방법을 객체간의 소통의 개념으로 가져왔다
- abstraction (추상화)
- 여러 객체들의 공통된 특성을 묶어 상위개념으로 표현하는 것 : 예 ) 남자 와 여자의 추상적 객체 = 사람
- Polymorphism (다형성)
- 객체를 표현하는 다양한 방식이 존재할수 있다. 예) 자식객체는 자식객체와 부모객체, 혹은 인터페이스로서 참조할수 있다.
- Encapsulation(캡슐화, 은닉화)
- 숨길 부분과 밖으로 드러낼 부분을 조절할수 있다. 예) private 필드
- Inheritance (상속성)
- 부모객체를 상속해서 자식객체를 만들수 있다 예) extends 키워드
- 자는 '거의' 완벽한 OOP이다. 약간 부족...
- OOP의 개념중에는 multiple inheritance(다중상속)이라는 개념이 존재한다. 관계가 없는 두 클래스를 상속해서 자식클래스를 만드는 것을 뜻한다.
- 하지만 자바는 다중상속을 지원하지 않는다.
- Java에서는 Interface 의 default method라는 방식으로 우회적으로 다중상속과 비슷한 방식을 지원하기는 한다. 하지만 이것 또한 진정한 의미의 다중상속은 아니다.
- 오랫동안 많은 사람들에 의해 좋다고 검증된프로그래밍 패턴, 문제의 타입별로 해결하기 좋은 프로그래밍 패턴들이 있다는 것이 알려졌다.
- 생성 패턴
- 추상 팩토리 패턴
- 빌더 패턴
- 팩토리 메서드 패턴
- 싱글톤 패턴
- 구조 패턴
- 어댑터 패턴
- 브리지 패턴
- 컴포지트 패턴
- 데코레이터 패턴
- 파사드 패턴
- 프록시 패턴
- 플라이웨이트 패턴
- 행위 패턴
- 책임 연쇄 패턴
- 반복자 패턴
- 중재자 패턴
- 전략 패턴
- 커맨드 패턴
- 방문자 패턴
- 인터프린터 패턴
- 메멘토 패턴
- 옵저버 패턴
- 사태 패턴
- 템플릿 메소드 패턴
- 널 오브젝트 패턴
- 디자인 패턴(어떤 프로그래밍 방법론에도 사용가능)이란 용어 자체는 OOP와 직접적인 관련 없음
- 객체라는 개념이 가진 "변화적인 성질(변이성)" 때문에 잘 어울려져 사용된다
- 일반적으로 객체는 때에 따라 생성되고, 객체의 성질이나 값을 부여 받고, 스스로 일을 수행하고, 다른 객체에게 값을 전달해준뒤, 소멸한다.
- 메모리가 태어났다가, 변경되고, 소멸된다.
1. 생성 패턴 = 객체 생성에 대한 방법
2. 구조 패턴 = 객체와 객체 사이의 상속/조합 관계 설정 방법
3. 행위 패턴 = 객체가 특정 행동을 함으로서 다른 객체에 값을 전달하는 방법