💡 객체 지향이란..?
1970년대에 나오기 시작했으며, C언어와 같은 ‘절차 지향’ 프로그래밍이 컴퓨터의 발전으로 인해 프로그램 복잡도가 증가하면서 유지보수, 개발기간 등 비효율적인 부분이 발생하여 [추상화, 상속, 은닉, 재사용, 인터페이스] 등의 특성을 가진 객체 지향으로 개발하기 시작.
- 현실에 존재하는 사물을 있는 그대로 모델링 하여, 이들의 행위와 속성을 정의하고, 절차가 아닌 객체가 중심이 되어 실제 사물이 동작하는 방식의 설계.
- 사물은 객체(Object), 사물이 하는 행위는(Method), 사물이 가지는 속성을 변수(Variable)이라고 정의한다.
객체의 3가지 요소
상태 유지 (객체의 상태)
- 객체는 상태 정보를 저장하고, 유지되어져야 하며 이러한 속성은 변수로 정의되어야 한다 또한 객체의 상태가 변경될 수 있어야 한다.
기능 제공 (객체의 책임)
- 객체는 기능을 제공해야 한다. 이 부분은 Method의 제공으로 이루어진다. 외부에서 직접 접근하는 것이 아닌 객체가 제공하는 Method로 기능이 제공되어야 한다. (캡슐화)
고유 식별자 제공 (객체의 유일성)
- 각각의 객체는 고유한 식별자를 가져야 한다.
물리 객체 : 물리적 객체는 실제로 사물이 존재하며, 이를 클래스로 정의한 객체를 의미한다.
개념 객체 : Service 부분의 business logic을 처리하는 부분을 의미하며, 여러 객체를 서로 상호작용 하도록 한다.
객체 지향의 4대 특성
1. 캡슐화
캡슐화는 객체의 속성(Variable) 을 보호하기 위해 사용한다.
- 속성의 상태를 변경하는 method가 있어야 하며, 각각의 method는 서로 관련성이 있어야 한다.
- 외부에서 속성에 직접 접근하는 것이 아닌 Getter/Setter Method를 통해서 접근한다. (변수는 private, 메서드는 public으로 선언)
- CRUD, BusinessLogic, 객체 생명 주기 처리, 객체 영구성 관리 Method를 제공한다.
장점 - 추상화 제공, 재 사용성 향상, 유지 보수 효율성 향상
2 . 상속
하위(자식) 으로 내려가 수록 구체화 되는 것.
효과
- 프로그램 구조에 대한 이해도 향상
최상위 클래스의 구조를 보고, 하위 클래스의 동작을 이해 할 수 있다.
- 재사용성 향상
상속을 이용하여, 해당 클래스에 필요한 속성 및 메소드를 모두 정의 하지 않고, 상속을 받아서 사용할 수 있다.
- 확장성 향상
일관된 형태의 클래스 객체를 추가 할 수 있어, 간단하게 프로그램 확장이 가능하다.
- 유지보수성 향상
각 객체마다, 자신의 메소드를 정의하고 있다면, 코드 수정에 많은 작업이 필요 하지만, 상속을 사용한 경우 일관된 형태로 작성이 가능하다.
3. 다형성
다형성은 하나의 개체가 여러 개의 형태로 변화 하는 것을 말한다.
- 오버라이딩을 통해 다형성 구현 가능.
4. 추상화
- 객체 지향에서 추상화는 모델링이다.
- 구체적으로 공통적인 부분, 또는 특정 특성을 분리해서 재조합 하는 부분이 추상화 이다. (다형성, 상속 등이 추상화에 해당)
💡 객체지향 설계 5원칙 SOLID
좋은 소프트웨어 설계를 위해서는 결합도(coupling)는 낮추고 응집도(cohesion)는 높여야 한다.
1. SRP (Single Responsibility Principle) 단일 책임 원칙
- 어떠한 클래스를 변경하는 이유는 한가지 뿐 이여야 한다.
2. OCP (Open Closed Principle) 개방 폐쇄 원칙
- 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.
- 상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신은 변화에 대해서는 폐쇄적이지만, 인터페이스는 외부의 변화에 대해서 확장을 개방해 줄 수 있다.
3. LSP ( Liskov Substitution Principle) 리스코프 치환 원칙
- 서브 타입은 언제나 자신의 기반(상위) 타입으로 교체 할 수 있어야 한다.
4. ISP (Interface Segregation Principle) 인터페이스 분리 원칙
- 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다.
- 프로젝트의 요구 사항, 설계를 고려하여 SRP(단일책임원칙) or ISP(인터페이스분리원칙)를 선택 한다.
5. DIP (Dependency Inversion Principle) 의존 역전 원칙
- 자신보다 변하기 쉬운 것에 의존하지 말아야 한다.
🔽
💡 POJO ( Plain Old Java Object ) JAVA
순수한 자바 오브젝트를 뜻한다.
특징
- 특정 규약에 종속 되지 않는다.
- 특정 Library, Module에서 정의된 클래스를 상속 받아서 구현하지 않아도 된다.
- POJO가 되기 위해서는 외부의 의존성을 두지 않고, 순수한 JAVA로 구성이 가능해야 한다.
- 특정 환경에 종속 되지 않는다.
- 특정 비즈니스 로직을 처리 하는 부분에 외부 종속적인 http request, session 등은 POJO를 위배한 것으로 간주한다.
- @Annotation 기반으로 설정하는 부분도 엄연히는 POJO라고 볼 수는 없다.
2023.08.20 - [🍃SpringFrameworks/SpringBoot] - [SpringBoot] 02. Design Pattern
'🍃SpringFramework > SpringBoot' 카테고리의 다른 글
[SpringBoot] 04. Spring Boot (0) | 2023.08.20 |
---|---|
[SpringBoot] 03. 웹개발 개론 (0) | 2023.08.20 |
[SpringBoot] 02. Design Pattern (0) | 2023.08.20 |
[SpringBoot] SpringBoot란? (0) | 2023.08.20 |
[SpringBoot] SpringBoot 에러 노트 (0) | 2023.08.20 |