Comment
객체지향 언어인 자바를 배우고 객체지향프로그래밍을 하도록 노력하지만 객체지향이 뭐에요? 라고 물어보면 선뜻 말하기가 쉽지 않다. 물론 나만 그럴 수도 있다. 이미 정리한 내용이지만 다시한번 정리하고 공부하는 의미해서 글을 다시 쓰려고한다.
전의 글을 보고싶다면 아래 링크에서 보면됩니다.
2022.06.10 - [JAVA/객체지향] - [java/객체 지향] 객체 지향 프로그래밍
객체 지향 프로그래밍(Object Oriented Programming)이란?
객체지향 프로그래밍은 Object Oriented Programming의 약자로 OOP라고 부르며 프로그램을 설계하는 개념이자 방법론입니다. 객체들간의 상호작용을 기본 개념으로 하고 OOP는 프로그래밍을 유연하고 변경하기 쉽게 만들기 때문에 재사용성이 용이하여 대규모 프로젝트에서 많이 사용되는 프로그래밍 방법이다.
클래스란?
클래스는 객체를 정의하기 위한 틀입니다. 즉, 클래스를 통해 여러 객체를 생성 할 수 있는데 클래스를 통해 생성된 객체를 인스턴스(Instance) 라고 합니다.
객체란?
객체는 영어로 Object 가 됩니다. 사전적인 의미로는 오감을 통해 알수 있는 물건, 물체가 됩니다. 즉, 우리눈에 보이는 모든 것들이 객체 입니다.
객체지향의 특징 4가지
캡슐화
캡슐화는 관련이 있는 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하도록 은닉하는 것입니다. 자세히는 캡슐화에는 접근 제어 지시자를 통해 외부로부터의 접근을 제한하여 객체내에서만 접근이 가능하도록 해주는 정보은닉과 인터페이스를 이용한 구현은닉을 모두 갖고 있습니다.
외부의 클래스 혹은 모듈에 의존적인 프로그램의 경우 변경이나 오류에 취약해지는데, 정보은닉을 통해 이러한 결합도를 낮추며 응집도를 높여준다.
추상화
추상화는 객체화하는게 아니라 필요한 정보만을 중심으로 객체에서 공통된 속성과 행위를 추출하는 것을 의미한다.
예를 들어, 게임 프로그램을 개발한다면, 캐릭터가 입을 수 있는 옷에 바지, 상의, 원피스, 등등 존재하는데 이들의 기능적인 내용은 다르지만 공통적인 속성과 행위를 개념으로 옷이라는 클래스로 정의할 수 있습니다.
상속
자바에서의 상속은 하나의 클래스가 부모클래스의 속성과 행동을 얻게 되는 방법입니다. 상속은 코드의 재사용성과 유지보수를 위해 사용됩니다. 상속을 사용하기 위해서는 extends 키워드를 상속 받을 클래스에 명시하여 사용할 수 있습니다. 상속되는 클래스는 super 클래스라 부르고 새롭게 생성된 클래스를 sub 클래스라 합니다.
- 자식클래스는 상속을 통해 부모클래스의 속성과 기능을 물려받는다.
- 또한, 다형성을 통해 변경이 필요한 부분을 변경하여 사용할 수 있다.
다형성
다형성이란 동일한 변수, 함수명 등이 다양한 방법으로 기능하는 것을 말하며 오버라이딩(Overriding), 오버로딩(Overloading)이란 형태로 제공된다.
오버로딩(overloading)은 새로운 메소드를 정의하는 것입니다. 하지만 오버라이딩(overriding)은 상속받은 기존의 메소드를 재정의하는 것입니다.
OOP 모범 사례
출처 : https://velog.io/@vincentj2/JAVA-OOP%EB%9E%80
상속보단 Composition
composition을 구현하기 위해서는 다양한 인터페이스의 생성이 이루어집니다. 상속은 어떤 클래스의 기능을 확장시키기 위한 목적으로 볼 수 있고 인터페이스는 해당 시스템이 작동하는데 필요한 필수적인 변수와 메소드들을 명시해줍니다. 인터페이스 구현을 통해 필수적인 기능외에 필요한 비지니스 로직들이 추가되고 사용자는 인터페이스에 존재하는 메소드를 통해 시스템을 작동 시킬 수 있기 때문입니다.
상속의 단점은 캡슐화를 깨뜨린다는 것입니다. 상위 클래스의 구현이 하위 클래스에게 노출되는 상속은 캡슐화를 깨뜨린다.캡슐화가 깨짐으로써 하위 클래스가 상위 클래스에 강하게 결합, 의존하게 되고 강한 결합, 의존은 변화에 유연하게 대처하기 어려워진다.
인터페이스 사용하여 구현하기
인터페이스를 사용하게 되면 코드의 유연성이 증가합니다. 인터페이스는 super class와 같은 역할을 하기 때문에 인터페이스를 통해 레거시 코드를 변경하지 않고 메소드의 로직을 새롭게 생성 할 수 있습니다.
코드 반복하지 않기
중복되는 코드를 사용하지 않고 추상화나 추상메소드를 사용하여 해결한다. 2곳 이상에서 동일한 코드가 작성된다면 함수로 분리하여 호출하는 방식으로 사용할 것
변경 사항 캡슐화
향후 변경 가능성이 있는 코드를 캡슐화하여 사용자가 코드를 직접 변경하는 일을 줄일 수 있습니다. 접근제어자를 사용하여 캡슐화를 진행하고 캡슐화를 달성하기 위해서는 디자인 패턴중 팩토리 디자인 패턴을 사용할 수 있습니다.
SRP(Single Responsibility Principle)
SRP는 OOP의 solid 원칙중 하나 입니다. SPR는 하나의 클래스가 단 하나의 책임을 가져야 한다는 것을 의미합니다. 즉 하나의 목적으로 클래스를 사용해야하며 이는 low coupling 과 high cohesion과 연관지어 생각할 수 있습니다.
OCP(Open Closed Principle)
OCP 또한 solid 원칙 중 하나이며 확장에는 열려있고 변경에는 닫혀있어야 한다는 의미입니다. 즉 기존 코드를 변경하지 않으면서 새로운 기능을 추가하는 것에는 유연해야 한다는 의미입니다.
'몰아 넣기' 카테고리의 다른 글
[스프링] GlobalException 처리 방법 및 예제 정리[1](@ControllerAdvice, @ExceptionHandler, @RestControllerAdvice) (0) | 2022.08.30 |
---|---|
[IT] 대칭키와 비대칭키에 대해서 (0) | 2022.08.25 |
[collection] 큐(queue) 무엇인가요? (0) | 2022.08.19 |
[알고리즘] 시간 복잡도와 Big-O 대해서 간단한 예제 (0) | 2022.08.18 |
[Collection] HashMap의 특징, 사용법 (0) | 2022.08.16 |