객체지향 기초

2023. 5. 22. 21:32BackEnd(Java)/OOP

✅ 아래 내용들에 대해서 알아보자

- 객체지향
- 객체
- 캡슐화
- 다형성
- 추상화
- 상속
- 기능과 책임 분리

 

 

객체지향

 객체지향 프로그래밍(Object-Oriented-Programming, OOP)이란 소프트웨어 개발 패러다임 중 하나로, 현실 세계의 객체를 소프트웨어적으로 모델링하여 프로그래밍하는 방법론이다. 

 

OOP는 객체들의 상호작용으로 이루어지며, 마치 여러 독립적인 부품들이 조합, 협력, 결합으로 이루어진 단일체라고 볼 수 있다. 예를 들어, 타이어, 핸들, 차제 등으로 자동차를 만드는데 이러한 각각의 독립적인 부품들이 각자의 책임과 역할을 가져 자동차라는 완성품을 생산할 수 있게 된다. 

 

결국 OOP를 하는 이유는 바뀌는 요구사항에 따라 프로그램을 유연하고 변경이 용이하게 가능하며, 코드의 변경을 최소하하고 유지보수 비용을 적게 하는 목적에 있다.

 

자 그러면, OOP의 각 특징들에 대해서 자세히 알아보도록 하자.

 

 

객체

 객체는 객체 지향 프로그래밍의 가반 기본적인 단위이자 시작점이라고 할 수 있다. 결국 OOP에서 핵심은 객체이며 객체들 간의 상호작용을 통해 프로그램을 구성한다.

 

객체 지향에서 모든 객체는 자신의 상태를 스스로 관리하는 자율적인 존재이다. 

 

 

 

캡슐화

 캡슐화는 기능의 구현을 외부로부터 감춘다. 캡슐화를 통해 기능을 사용하는 코드에 영향을 주지 않고(최소화) 내부 구현을 변경할 수 있는 유연함이 생기게 되고, 연쇄적인 변경 전파를 최소화할 수 있다.

 

캡슐화의 2개의 법칙을 통해 객체 간의 결합도를 효과적으로 낮추는 방법을 알아보자

 

1. Tell, Don't Ask(데이터 달라하지 말고 해달라고 하기)

 객체에게 데이터를 요청해서 체크하는것이 아니라 객체에게 행동(behavior)을 시켜 수행하게 한다. 예시를 통해 알아보자

 

기존 코드

 

위의 캡슐화할 수 있는 부분을 리팩토링한 예시 코드이다.

 

캡슐화 적용 코드

 

2. Demeter's Law

 

낯선 사람은 경계하고 친구랑만 놀라는 의미로 아래 3가지의 규칙이 존재한다.

  • 메서드에서 생성한 객체의 메서드만 호출해라
  • 파라미터로 받은 객체의 메서드만 호출해라
  • 필드로 참조한 객체의 메서드만 호출해라

 

캡슐화 전 코드

 

캡슐화 후 코드

 

 

 

다형성

 다양한 형태를 갖는 것, 객체 지향에서는 한 객체가 여러 타입을 갖는 것이다. 주로 자바에서는 interface

 

추상화(Abstraction)

 데이터나 프로세스 등을 의미가 비슷한 개념이나 의미 있는 표현으로 정의하는 과정

특정한 성질, 공통 성질

 

기능과 책임 분리

 

이전 코드

 

 

리팩토링 후 

 

 

 

 

 

 

 

별도 객체, private 메서드, 다른 클래스의 static 메서드 등으로 분리할 수 있을 텐데, 저는 독립적으로 테스트하고 싶은 대상인지 따져보는 편입니다. 독립적으로 테스트하고 싶은 경우 별도 객체나 static 메서드로 분리해서 분리한 대상을 테스트합니다.

또 단위 테스트 가능성도 따져 봅니다. 단위 테스트하기 힘든 구조일 때 일부 코드 블록을 별도 객체로 분리해서 대역(mock 등)으로 대체할 수 있는 구조로 만듭니다.

테스트에 큰 이점이 없으면 별도 클래스로 분리하지 않고 private 메서드로 분리하는 정도만 합니다.

 

 

 


참고자료

반응형

'BackEnd(Java) > OOP' 카테고리의 다른 글

일급 컬렉션  (0) 2023.05.22