brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Jul 24. 2018

Effective Java - 메서드(method)

#40 메서드 시그니처를 신중하게 설계하자

Effective Java - 메서드(method)


#40 메서드 시그니처를 신중하게 설계하자


#01 메서드 이름을 신중하게 짓자


뻔한 얘기지만, 일관성 있고 이해하기 쉽고, 공감이 가는 이름으로 지어야 합니다.

그리고 표준 작명 규칙(standard naming convention)을 따라야 합니다.

이름은 동사(verbs)로 이루어져 있고, 첫 글자는 소문자 그리고 각 내부 단어의 첫 글자는 대문자로 해야 합니다.

#01 standard naming convention




#02 편리한 메서드를 만드는데 너무 열중하지 말자


메서드가 너무 많으면, 이를 이해하고 사용하고 문서화하고 테스트하고 유지 보수하기 어렵게 됩니다.

따라서 각 동작에 대해서 충분한 기능을 수행하는 메서드를 적절하게 제공해야 합니다. 




#03 너무 많은 매개 변수를 피하자


매개 변수는 4개 이하를 목표로 하는 게 좋습니다.

이전에 빌더 패턴에서도 얘기했듯이, 매개 변수가 많아지면 유지 보수도 힘들고 가독성도 떨어집니다.

이러한 매개 변수를 줄이는 방법들이 있습니다.


1. 하나의 메서드를 여러 개로 쪼갬

하나의 메서드를 여러 개로 쪼개면, 각 메서드는 매개 변수의 일부만 필요합니다.


예를 들어, 아래와 같이 List의 특정 요소들(subList) 중, 해당 요소의 마지막 인덱스(lastIndex)를 구하기 위해서는 3개의 매개 변수가 필요하지만 이러한 메서드는 제공되지 않습니다.

list = a, b, c, d, b, f 중 index를 기준으로 1~3번째 sub list를 구함

sub list = b, c, d 중 "b" 요소의 마지막 index를 int 형태로 반환

#02 getLastIndexFromSubList


대신 매개 변수가 1~2개가 필요한 subList(int fromIndex, toIndex)와 lastIndexOf(E e) 메서드를 조합하면, 이 값을 구할 수 있습니다.

list = a, b, c, d, b, f 중 index를 기준으로 1~3번째 sub list를 구함 >> subList 메서드

sub list = b, c, d 중 "b" 요소의 마지막 index를 int 형태로 반환 >> lastIndexOf 메서드

#03 subList & lastIndexOf


2. 매개 변수 그룹들을 보존하는 지원 클래스(helper class)를 만듦


매개 변수 그룹을 보존하는 지원 클래스(helper class)를 만들 수 있습니다.

#04 putHelper method

클래스를 만들어야 하지만, 이를 통해 매개 변수를 한 번에 보낼 수 있습니다.

#05 Helper class


3. 빌더 패턴을 이용


빌더 패턴을 이용할 수 있습니다. 자세한 내용은 아래를 참고해 주시기 바랍니다.

https://brunch.co.kr/@oemilk/117




#04 매개 변수의 타입은 클래스보다 인터페이스를 사용하자


예를 들어, Map을 이용한다면 HashMap 클래스보다 Map 인터페이스가 더 좋습니다.

Map 인터페이스를 매개 변수로 쓰면 HashMap, TreeMap 등 Map 인터페이스를 구현한 어떠한 클래스도 다 가능합니다.

하지만 클래스를 이용하면, HashMap, TreeMap 등 타입에 따라 별도의 메서드를 작성해야 합니다.




#05 boolean 매개 변수보다는 두 개의 요소를 갖는 enum을 사용하자 


아래 메서드는 Live 타입인지 아닌지에 따라 Player를 설정하는 로직이 다른 메서드입니다.

#06 setPlayer method


만약 타입이 늘어나게 된다면, boolean 매개 변수를 추가해야 합니다.

이를 enum으로 구현한다면, 아래와 같이 하나의 매개 변수로 구현이 가능합니다.

#07 setPlayer method




매거진의 이전글 Effective Java - 메서드(method)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari