728x90
01. 객체지향의 등장
절차 지향 언어
- 간단한 로직을 순차적으로 처리하여 결과를 얻는다.
- 프로그램 복잡도의 증가로 인한 비효율이 발생한다.
- 절차 지향 언어의 예시로는 C언어가 있다.
- 이후에 효과적인 개발 방식으로 객체 지향 개발을 시작했다.
객체 지향 언어
- Object(객체)는 사물이다.
- Method는 행위이다.
- Variable(변수)는 속성이다.
- 객체 지향 언어의 예시로는 Java가 있다.
- 어떠한 운영체제에서도 자바 가상 머신만 있으면 독립적으로 실행될 수 있도록 설계되었다.
- 여러 플랫폼에서 호환성을 제공한다.
객체의 3가지 요소
- 상태 유지 (by Variable)
- 기능 제공 (by Method)
- 고유 식별자 제공
물리 객체와 개념 객체
- 물리 객체
- 실제로 사물이 존재한다.
- 이를 클래스로 정의한 객체를 의미한다.
- 개념 객체
- 웹 시스템에서 Service에 해당된다. 즉, Business logic을 처리하는 부분을 의미한다.
- Business logic에서는 여러 객체가 서로 상호작용 하도록 한다.
02. 객체지향의 4대 특성
1) 캡슐화
- 객체의 속성(Variable) 보호하기 위해 사용된다.
- 각각의 Method는 서로 관련성 있어야하고, 상대되는 기능을 제공해야 한다.
- Method에 필요한 값들은 매개변수의 형태로 전달되어야 한다.
- Getter/Setter Method
- CRUD Method
- Business Logic Method
- 객체의 생명 주기를 처리하는 Method (ex. destroy(), disconnect(), quit() 등)
- 객체의 영구성을 관리하는 Method
- 장점으로는 추상화 제공, 재사용성 향상, 유지보수 효율성 향상이 있다.
- 변수는 private, Method는 public 으로 하여 무결성을 보장한다.
2) 상속
- 하위로 내려갈 수록 구체화 된다고 생각하면 된다.
- 장점으로는 프로그램 구조에 대한 이해도/재사용성/확장성/유지보수성 향상이 있다.
3) 다형성
- 하나의 개체가 여러 형태로 변화하는 것을 의미한다.
- 오버라이딩을 통해 실현한다.
4) 추상화
- 객체지향에서의 추상화는 모델링을 의미한다.
- 공통적인 부분, 특정 특성을 분리하여 재조합하는 것이다.
- 다형성과 상속 모두 추상화에 속한다.
03. 객체지향 설계 5원칙 SOLID
결합도와 응집도
- 좋은 소프트웨어를 설계한다는 것은 결합도는 낮고, 응집도는 높다는 것이다.
- 결합도 (Coupling)
- 클래스 간의 상호 의존도를 나타낸다.
- 결합도가 낮으면 객체 재사용 및 유지보수에 유리하다.
- 응집도 (Cohension)
- 하나의 모듈 내부에 존재하는 구성 요소들은 기능적 관련성이 있다.
- 응집도가 높으면 모듈은 하나의 책임에 집중하고 독립성이 높아진다.
- 재사용 및 유지보수에 유리하다.
1) SRP(Single Responsibility Principle) 단일 책임 원칙
- 어떠한 클래스를 변경하는 이유는 단 하나여야 한다.
2) OCP(Open Closed Principle) 개방 폐쇄 원칙
- 자신의 확장에는 Open, 주변의 변화에는 Closed 됨을 의미한다.
- 예시로는 JDBC, Mybatis, Hibernate, Java에서의 Stream 등이 있다.
3) LSP(Liskov Substitution Principle) 리스코프 치환 원칙
- 서브 타입은 언제나 자신의 상위 타입으로 교체할 수 있어야 한다.
4) ISP(Interface Segregation Principle) 인터페이스 분리 원칙
- 클라이언트는 자신이 사용하지 않는 Mehtod에 의존하면 안된다.
- 프로젝트 요구 사항과 설계에 따라 SRP(단일 책임 원칙)과 ISP(인터페이스 분리 원칙) 중 선택한다.
5) DIP(Dependency Inversion Principle) 의존 역전 원칙
- 자신보다 변하기 쉬운 것에 의존하면 안된다.
04. POJO Java
POJO Java란?
- POJO = Plain Old Java Object
- 순수한 자바 오브젝트이다.
POJO의 특징
- 특정 규약에 종속되지 않는다.
- 특정 Library, Module에서 정의된 클레스를 상속받아 구현하지 않아도 된다.
- POJO가 되기 위해서는 외부의 의존성을 두지 않고, 순수한 JAVA로 구성이 가능해야 함
- 특정 환경에 종속되지 않는다.
- 특정 Business logic을 처리하는 부분에 외부 종속적인 http request, session 등은 POJO를 위배한 것이다.
- @Annotation 기반으로 설정하는 부분도 엄연히 POJO라고 부를 수 없다.
- Spring, Hibernate 는 객체지향적인 설계, POJO를 지향한다.
728x90