객체지향(Object Oriented Programming)
2024년 3월 8일
-
자바(Java)는 객체지향의 특징을 가지고 있다.
-
객체지향이란 적절한 객체(Object)에게 적절한 책임을 할당하여 서로 메세지를 주고 받으며 협력하도록 하는것이다.
-
즉, 실제세계를 객체(Object)라는 단위로 나누고 객체들간의 상호작용을 의미한다.
-
점점 증가하는 SW 복잡도를 낮추기 위해 객체지향 패러다임이 대두되었다.
-
클래스(Class)가 아닌 객체(Object)에 초점을 맞추는 것과 객체들에게 얼마나 적절한 역할과 책임을 할당하는지가 관건이다.
1. 추상화(Abstraction)
- 불필요한 부분을 제거함으로써 필요한 핵심만 나타낸 것이다.
- 흔히 일반화, 단순화의 의미와 같으며 복잡한 특징을 제거하는 것이다.
2. 다형성(Polymorphism)
- 다양한 형태를 가지는 것이 다양성이다.
- 하나의 타입으로 여러 종류의 객체를 참조하는 것이다.
3. 캡슐화(encapsulation)
- 객체 내부의 세부사항을 외부로부터 감추는 것이다.
- 인터페이스(Interface)만 공개해서 변경하기 쉬운 코드를 만들기 위함이다.
4.상속(Inheritance)
- 부모로 부터 물려 받은 코드이다.
절차지향 프로그래밍 vs 객체지향 프로그래밍
- 책임이 한곳에 집중되어 있는 방식(getter)은 절차지향이고, 책임이 여러 객체로 적절히 분산돼 있는 방식은 객체지향으로 볼 수 있다.
높은 응집도와 낮은 결합도
- 마치 서랍정리처럼 비슷한 것들끼리는 응집도르르 높이기 위해 한 곳에 모아두고 다른 것들끼리는 분리를 시킨다는 게 높은 응집도와 낮은 결합도이다.
- 이렇게 했을 때의 장점은 어떠한 변경이 생겼을 때, 변경의 포인트가 하나로 집중될 수 있다는 것이다.
객체지향 설계 및 구현
- 객체지향 세계에서는 모든 객체가 능동적인 존재이다.
- 도메인을 구성하는 객체에는 어떤 것들이 있는지 고민한다.
- 객체들 간의 관계를 고민한다.
- 동적인 객체를 정적인 타입으로 추상화해서 도메인 모델링 한다.
- 협력을 설계 한다.
- 객체들을 포괄하는 타입에 적절한 책임을 할당한다.
- 구현한다.