최근 인프런 : 객체지향 프로그래밍 강의를 보며 객체지향에 대해 지식을 다시 한번 점검하고 쌓고 있다.
모든 내용이 중요하지만 그래도, 꼭 내기준에서 남겨놔야 할 것 같은 내용들에 대해 재 정리를 하며 기록하고자 한다.
다음은 요구사항의 변경으로서, Account의 로직을 변경해야 하는 경우가 생겼을 때
각 영향을 받는 코드들의 수정이 발생하게 되어진다.
이는 절차지향의 단점으로도 볼 수 있다.
만약 캡슐화를 진행한 상황에서, 해당 내부 구현을 변경해야 하는 경우가 생길 시
변화가 요구되는 해당 코드의 내부 로직만 변경함으로서 이전보다 더 간편하게 변경이 가능하다.
즉, 각 코드별 결합도가 더 느슨해짐으로서 각 코드 간의 의존도를 떨어뜨리는 게 핵심이지 않을까란 생각이 들었다.
데이터를 해달라 하지 말고 해달라고 이야기 하기
즉, 비지니스 로직 내 객체의 데이터를 제공한 상태로 처리를 요구하는 것이 아닌, 해당 객체가 판단하여 결과를 요구하도록 하는 규칙
구현이 아닌 연습이기에 빨간 줄은 양해 바랍니다..
해당 서비스 클래스 내, Member에 대한 결과 값에 대한 비교가 있다 가정 시, 다음 코드의 WorkFlow는
Member 안의 VerificationEmailStatus 의 값을 꺼낸 후, 서비스 클래스 내 2와 비교 후 해당 값이 true 일시 다음 값을 return 하는 결과이다.
하지만, 위 if 비교는 Member 객체 안 의 데이터의 비교 즉, Member 객체 안에서의 처리가 가능하다. 한번 적용해보자
다음과 같이 Member 객체 안에서 비교를 두고 해당 객체의 결과 값만을 서비스 클래스에서는 알게 된다.
만약, 요구사항 변경으로 값을 수정해야하는 상황이 올 시 서비스 클래스가 아닌 객체 내에서 변경하면 된다.
내가 느낀바로 이에 핵심은 "값을 꺼내서 보여주고 결과를 요구하는 것이 아닌 결과만을 제공하는 것"이라 생각했다.
각 기능 구현을 외부에 감추고 결과 값만을 제공하기에, 비즈니스 로직에 영향을 최소화하거나 주지 않고, 요구사항에 변화가 요구되는 기능만을 수정할 수 있는 유연한 코드를 작성할 수 있는 게 핵심 포인트이다.
[BOOK : 3장] 역할, 책임, 협력 (2) | 2022.10.27 |
---|---|
[BOOK : 클린코드 1장] 깨끗한 코드 (0) | 2022.10.23 |
[BOOK : 오브젝트 2장] 객체지향 프로그래밍을 읽고 (0) | 2022.10.21 |
[BOOK : 오브젝트 1장] 객체, 설계를 읽고 (0) | 2022.10.20 |
[OOP / 객체지향] 들어가며 (0) | 2022.09.19 |