일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 메모이제이션
- npm
- github
- PostgreSQL
- Solid
- dfs
- 캡슐화
- CSS
- 다형성
- 상속
- mock
- Secret
- Java
- 서브셋폰트
- package
- AOP
- 객체지향
- process.env
- 추상화
- MariaDB
- GOF
- dotenv
- DP
- git
- netlify
- 클라우드
- bfs
- 디자인 패턴
- 동적계획법
- azure
- Today
- Total
이것저것 해보기🌼
객체지향 핵심요소와 객체지향 설계 5원칙 본문
객체지향이란 무엇일까?
1. 객체 지향의 등장
1970년대에 들어서 객체지향 용어가 나왔으며, 그 이전에는 순서대로 명령어를 입력해서 실행되는 절차지향이 주를 이뤘다. 간단한 Logic에서는 문제가 없었지만, 컴퓨터의 발전과 프로그램 복잡도 증가로 엄청난 비효율이 발생하게 되었다.
이런 어려움을 해결하기 위해 객체지향 특성인 추상화, 상속, 은닉, 재사용, 인터페이스 등으로 개발하게 되었다.
객체지향은 현실에 존재하는 사물을 객체라고 부르며, 해당 사물이 하는 행위를 메소드로 정의하고 해당 사물이 가지는 속성을 변수라고 정의한다.
2. 객체의 3가지 요소
1) 상태유지
상태정보를 저장하고 유지되어져야하며 변경될 수 있어야한다.
2) 기능제공
기능을 제공해야한다. (Method 제공)
3) 고유식별자 제공
각각 고유한 식별자를 가져야한다.
객체는 사람, 자동차 와 같이 물리 객체도 있지만
business logic을 처리하는 부분인 개념 객체도 있다. 이는 Spring frameword의 Service라고 부르는것에 해당한다.
3. 객체지향의 4가지 핵심요소
1) 캡슐화
객체의 속성을 보호하기 위해 사용
이를 위해 알맞게 Method를 설계해야하며, Method는 실물 객체가 가진 기능을 모두 제공하고, 객체 안의 속성을 처리해야한다. 즉, 다른 객체를 전달받아 다른 객체에 정의된 속성을 직접 처리하면 안된다.
실제로 Method가 어떻게 동작하는지는 외부에서 이해할 필요가 없고 단순 호출로 기능을 실행할 수 있다.
이를 통해 추상화를 제공하며, 재사용성과 유지보수 효율성이 향상된다.
또한 변수를 private으로 선언하고 public method는 입력된 매개변수를 Validation을 한후에 실행하는 것이 기본이기 때문에 무결성을 제공한다.
ex) Getter / Setter
직접 내부 속성에 접근하지 않고 Getter/Setter를 통해 접근
ex) CRUD Method
데이터 처리를 위해 기본적인 CRUD 메소드를 제공
ex) 객체의 생명 주기 처리 Method
destroy(), disconnect() 등 소멸에 대한 method
2) 상속
하위로 내려갈수록 구체화되는 것 ex) 동물 -> 포유류 -> 사람...
최상위 클래스의 구조를 보고 하위 클래스의 동작을 이해할 수 있다.
상속을 이용하여, 해당 클래스에 필요한 속성 및 메소드를 모두 정의하지 않고 상속받아 사용할 수 있다.
이를 통해 재사용성, 확장성, 유지보수성이 향상된다.
3) 다형성
하나의 객체가 여러 개의 형태로 변화하는 것이며, 오버라이딩을 통해서 가능하다.
동일한 Draw() 메소드를 사용해도 실제로 클래스별로 다른 동작을 하도록 만들 수 있다.
4) 추상화
객체지향에서 추상화는 모델링이다.
구체적으로 공통적인 부분, 또는 특정 특성을 분리해서 재조합하는 부분이 추상화이다.
4. 객체지향 설계 5원칙
응집도와 결합도
좋은 소프트웨어는 결합도는 낮고, 응집도는 높아야한다.
결합도 : 클래스 간의 상호 의존 정도를 나타내며, 결합도가 낮으면 모듈간의 상호의존성이 줄어들어 객체의 재사용 및 유지보수가 유리하다.
응집도 : 하나의 클래스 내부에서 존재하는 구성요소들의 기능적 관련성으로, 응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져, 재사용 및 유지보수가 용이하다.
객체지향 5대 원칙
SOLID
1) SRP(Single Responsibility Principle) : 단일 책임 원칙
하나의 클래스는 하나의 책임만을 갖도록 설계한다.
2) OCP(Open Closed Principle) : 개방 폐쇄 원칙
자신의 확장에는 열려있고 주변의 변화에 대해서는 닫혀있어야한다.
상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신은 변화에 대해서는 폐쇄적이지만, 인터페이스는 외부의 변화에 대해서 확장을 개방해준다.
JDBC와 Mybatis, Hibernate 등 JAVA에서는 Stream(Input, Output)에서 찾아볼 수 있다.
3) LSP (Liskov Subtitution Principle) : 리스코프 치환 원칙
서브타입은 언제나 자신의 상위 타입으로 교체할 수 있어야 한다.
4) ISP (Interface Segregation Principle) : 인터페이스 분리 원칙
클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다.
프로젝트 요구사항과 설계에 따라서 SRP(단일책임원칙) / ISP(인터페이스분리원칙) 중에 선택한다.
5) DIP(Dependency Inversion Principle) : 의존 역전 원칙
자신보다 변하기 쉬운 것에 의존하지 말아야한다.
+) 참고사항
POJO (Plain Old Java Object)
순수한 자바 오브젝트
외부에 종속성이 없고 순수 자바로 이루어진 프로젝트
- 특정 규약에 종속되지 않는다.
: 특정 library, module에서 정의된 클래스를 상속받아서 구현하지 않는다.
- 특정 환경에 종속되지 않는다.
: 특정 비즈니스 로직을 처리하는 부분에 외부종속적인 http request, session 등을 사용하지 않는다.
POJO Framework
- Spring, Hibernate
하나의 서비스를 개발하기 위해 시스템이나 비즈니스 로직의 복잡함 등 어려움을 맞이하게 되므로
이 두 프레임워크는 객체지향적이며 POJO를 지향한다.
'BE > JAVA' 카테고리의 다른 글
디자인 패턴 (0) | 2021.06.29 |
---|---|
IntelliJ 기본 단축키 정리 2 (Windows) (0) | 2021.06.28 |
IntelliJ 기본 단축키 정리 1 (Windows) (0) | 2021.06.28 |
IntelliJ IDE 설치하기 (0) | 2021.06.28 |