#1. 객체지향의 오브젝트(java)

Subin Ahn·2023년 4월 9일

토비의스프링

목록 보기
1/4
post-thumbnail
토비의 스프링3.1 로 스프링 프레임워크에 대한 공부를 시작했다. 그 첫번째 이야기로 객체지향 설계(object-oriented-design)의 오브젝트(object)란 무엇이고, 오브젝트를 어떤 구조로 설계하는 것이 객체지향을 잘 따르는 것인지 공부한 내용을 정리해보겠다.

객체지향이란?

객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (출처: 위키피디아)

오브젝트란?

책에서 오브젝트란 ~이다 라고 정의하지는 않는다. 오브젝트를 정의내리는 것이 결국 객체지향을 정의내리는 것이라고 생각한다. 그냥 내가 설명할 수 있는 쉬운 말로 설명해보자면, 자바에서 하나의 클래스, 객체가 오브젝트라고 보면 될 것 같다.


객체지향의 오브젝트 설계를 위한 과정들!

기본적으로 객체지향 설계 원칙(SOLID)을 비롯해서,
1. 다양한 목적을 위해 재활용 가능한 설계 방법인 디자인패턴
2. 더 깔끔한 구조가 되도록 지속적으로 개선해나가는 작업인 리팩토링
리팩토링이란? 기존의 코드를 외부 동작방식에는 변화 없이 내부 구조를 변경해서 재구성 하는 작업
3. 오브젝트가 기대한 대로 동작하고 있는지를 효과적으로 검증하는 데 쓰이는 단위테스트

실제로 일하면서 리팩토링을 많이 하는데, 뭔가 거창한 이야기가 아니라 개발자들이 습관적으로 하는 리팩토링이 나와서 반가웠다:)


오브젝트 설계 시 염두에 두어야 할 것 - 관심사의 분리

객체를 설계할 때 가장 염두에 둬야할 사항은, 미래의 변화를 어떻게 대비할 것인가 이다. 그에 대한 대책은 변화의 폭을 최소한으로 줄여주는 것이다. 그렇게 개발하기 위하여, 설계 할 때, 분리와 확장을 고려하여 설계하는 것이 바람직하다.
1. 분리(관심사의 분리)

  • 하나의 객체는 한 종류의 관심사만 담기!
  • 중복된 코드는 분리 추출하여 메소드화하기
  • 리팩토링
  • 상속을 통한 확장
  • 디자인 패턴을 적용한 확장
  1. 확장
    분리와 비슷하다고 생각될 수 있는데, 분리는 좀 더 지역적인 느낌이고 확장은 구조적인 느낌이라고 생각하면 될 것 같다. 확장에는,
  • 클래스의 분리 > 관심사가 다른 메소드라고 볼 수 있다면, 아예 다른 오브젝트로 분리 생성하기
  • 인터페이스 도입
  • 관계설정 책임의 분리 > 제 3의 클래스를 생성하여 오브젝트 간 관계를 맺게 해주는 방법

객체지향 설계의 원칙과 패턴

  1. 개방 폐쇄 원칙 - 클래스나 모듈은 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.
  2. 높은 응집도와 낮은 결합도
  • 높은 응집도 > 하나의 모듈, 클래스가 하나의 책임 또는 관심사에만 집중되어 있다는 것
  • 낮은 결합도 > 하나의 오브젝트가 변경이 일어날 때, 관계를 맺고 있는 다른 오브젝트에게 변화를 요구하는 정도가 낮은 것 -> 느슨하게 연결된 상태
profile
신뢰를 주는 개발자

0개의 댓글