혼자서 하는 개발보다 많은 사람들과 협력하여 개발하는 일이 많다. 또한, 실제로 기능을 개발하는 일보다 유지보수하는 일이 많다고 한다. 그렇기때문에, 코드는 다른 사람이 보고 이해하기 쉽도록 할 필요가 있다.

 

 

개발, 강의를 보며 더 깔끔하게 코드를 작성할 수 있는 요령을 발견한다면 이에 대하여 정리할 예정이다. 

 

 

 

Tell Don`t Ask

다른 객체에 데이터를 요청해서 변경하고 저장하라고 하지말고 기능을 실행하라! 즉,데이터를 잘 알고 있는 객체에게 기능을 수행하라고 하라. 이렇게되면, Encapsulation이 유지되어 변경에 영향을 안 받게 된다.

예를들어 보자. 넷플릭스에서 회원의 구독이 만료되어있는지, 만료되지 않았는지 확인하는 코드로 예시를 들어보겠다.

if(member.getExpiredDate().getTime() < System.currentTimeMillis)

클라이언트에서 위처럼 코드를 작성하면 member객체에 저장되어 있는 만료날짜를 가져와 현재 시간보다 적으면 만료되지 않았다는 것을 알 수 있다.

 

하지만, 이보다는 아래와 같은 방식이 역할과 책임을 잘 분리하고 유지보수하기 수월하다.

if(member.isExpired())

위처럼 설계해야 하는 이유는 두가지가 있다. 

1. 만료가 되었는지 되지 않았는지는 Member 객체에 대한 책임이고, 수행해야할 역할이다. 

2. 유지보수하기 수월하다.

 

여기서 유지보수하기가 수월하다는 이유가 와닿지 않을 수도 있다. 그렇다면, 가정해보자. 처음 설계는 밀리세컨드로 만료날짜를 확인했다. 하지만, 후에 밀리세컨드가 아닌 세컨드로 만료날짜를 확인하기로 변경되었다면 클라이언트 코드 중 어디서 만료날짜를 확인했는지부터 찾아야할 것이다. 하지만, 만료날짜를 확인하는 클라이언트 코드가 많은 경우라면? 코드를 다 찾고 수정하기 어렵다는 것을 알 수 있다.

 

하지만, 2번째와 같이 코드가 되어있다면 Member 클래스에서 isExpired() 메소드 안에 코드만 한번 수정해주면 끝난다. 이처럼 초반 설계는 중요하다..!

 

 

 

 

 

 

 

 

'JAVA' 카테고리의 다른 글

절차지향 vs 객체지향  (0) 2022.11.04
[Java 8] Metaspace  (0) 2022.10.18
[JAVA 8] ParallelSort  (0) 2022.10.15
[Java 8] CompletableFuture  (0) 2022.10.13
[Java 8] Date와 Time  (0) 2022.10.12

+ Recent posts