익히 들어봤겠지만 자바는 객체 지향 언어이다. 여기서 객체 지향이란 무슨 뜻일까?
C언어 처럼 실행하고자 하는 순서대로 명령어를 입력해서 실행되는 방식으로 코딩하는 언어들을 절차 지향 언어라고 한다. 점점 프로그램의 복잡도가 증가하면서 이에 들어가는 유지보수 개발기간 등 다양한 부분에서 비 효율이 발생해서 이를 해결하기 위해 객체 지향 언어가 등장했다. 객체 지향이란 현실에 존재하는 사물을 있는 그대로 모델링하여, 이들의 행위와 속성을 정의하고, 객체가 중심이 되어 실제 사물이 동작하는 방식으로 설계하는 것이다. 사물을 객체(Object), 사물이 하는 행위를 Method, 사물이 가지는 속성을 변수(Variable) 라고 정의한다.
객체지향의 4가지 핵심요소에 대해 알아보자.
- 캡슐화 : 객체의 속성을 보호하기 위해서 사용. 추상화를 제공하며, 재사용성이 높아진다.
- 상속 : 객체 지향에서 상속은 속성의 상속이 아니라, 하위로 내려갈 수록 구체화 되는 것을 의미한다. 재사용성과 확장성이 향상된다.
- 다형성 : 하나의 개체가 여러 개의 형태로 변화하는 것을 의미하며, 오버라이딩을 통해서 구현 가능하다.
- 추상화 : 공통적인 부분, 또는 특정 특성을 분리해서 재조합 하는 것을 의미. 다형성, 상속 모두 추상화에 속한다.
다음으로 객체지향의 설계 5원칙(SOLID)에 대해 알아보자.
- SRP 단일 책임 원칙 : 어떠한 클래스를 변경해야 하는 이유는 한가지 뿐이어야 한다.
- OCP 개방 폐쇄 원칙 : 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.
- LSP 리스코프 치환 원칙 : 서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다.
- ISP 인터페이스 분리 원칙 : 클라이언트는 자신이 사용하지 않는 메서드에 의해 의존 관계를 맺으면 안된다.
- DIP 의존 역전 원칙 : 자신보다 변하기 쉬운 것에 의존하지 말아야 한다.
디자인 패턴이란 자주 사용하는 설계 패턴을 정형화해서 이를 유형벌로 가장 최적의 방법으로, 개발을 할 수 있도록 정해둔 설계 알고리즘과 유사하지만 정답이 있는 형태는 아니며 프로젝트의 상황에 맞추어 적용 가능하다. 객체지향 개념에 따른 설계 중 재사용할 경우 유용한 설계를 디자인 패턴으로 정리해둔 GOF 디자인 패턴이 있다. 생성 패턴, 구조 패턴, 행위 패턴으로 나뉘며 대표적으로 몇 가지를 살펴보자.
생성 패턴
- Singleton pattern : 어떠한 클래스(객체)가 유일하게 1개만 존재할 때 사용한다. 주로 서로 자원을 공유할 때 사용한다.
- Builder pattern :
- Chaining pattern :
구조 패턴
- Adapter pattern : 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 한다.
- Decorator pattern : 기존 뼈대(클래스)는 유지하되, 이후 필요한 형태로 꾸밀 떄 사용한다. 확장이 필요한 경우 상속의 대안으로도 활용한다.
- Facade pattern : 여러개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존관계가 있을 때, 중간에 facade라는 객체를 두고 여기서 제공하는 interface만을 활용하여 기능을 사용하는 방식이다.
- Proxy Pattern : Proxy Class를 통해서 대신 전달 하는 형태로 설계되며, 실제 Client는 Proxy로 부터 결과를 받는다.
행위 패턴
- Observer pattern : 변화가 일어 났을 때, 미리 등록된 다른 클래스에 통보해준다.
- Strategy pattern : 유사한 행위들을 캡슐화하며, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아니라 전략만 변경하여 유연하게 확장한다.

'etc... > 패스트캠퍼스 챌린지' 카테고리의 다른 글
Java & SpringBoot로 시작하는 웹프로그래밍 : 자바 인강 - Ch.8 (0) | 2022.01.04 |
---|---|
Java & SpringBoot로 시작하는 웹프로그래밍 : 자바 인강 - Ch.6 (0) | 2021.12.19 |
Java & SpringBoot로 시작하는 웹프로그래밍 : 자바 인강 - Ch.5 (0) | 2021.12.13 |
Java & SpringBoot로 시작하는 웹프로그래밍 : 자바 인강 - Ch.4 (0) | 2021.12.07 |
패스트캠퍼스 챌린지 최종 후기 (0) | 2021.12.07 |