From 5daed25ff1ac19f8704ac267dc6e6a0f709b8981 Mon Sep 17 00:00:00 2001 From: siyeonSon <87802191+siyeonSon@users.noreply.github.com> Date: Sun, 27 Aug 2023 22:44:32 +0900 Subject: [PATCH] =?UTF-8?q?[Item51]:=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=8B=9C=EA=B7=B8=EB=8B=88=EC=B2=98=EB=A5=BC=20=EC=8B=A0?= =?UTF-8?q?=EC=A4=91=ED=9E=88=20=EC=84=A4=EA=B3=84=ED=95=98=EB=9D=BC=20(#1?= =?UTF-8?q?23)(=EC=8B=9C=EC=97=B0)=20(#134)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...44\352\263\204\355\225\230\353\235\274.md" | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 "Ch08/item51/\353\251\224\354\204\234\353\223\234_\354\213\234\352\267\270\353\213\210\354\262\230\353\245\274_\354\213\240\354\244\221\355\236\210_\354\204\244\352\263\204\355\225\230\353\235\274.md" diff --git "a/Ch08/item51/\353\251\224\354\204\234\353\223\234_\354\213\234\352\267\270\353\213\210\354\262\230\353\245\274_\354\213\240\354\244\221\355\236\210_\354\204\244\352\263\204\355\225\230\353\235\274.md" "b/Ch08/item51/\353\251\224\354\204\234\353\223\234_\354\213\234\352\267\270\353\213\210\354\262\230\353\245\274_\354\213\240\354\244\221\355\236\210_\354\204\244\352\263\204\355\225\230\353\235\274.md" new file mode 100644 index 0000000..1aa1e4c --- /dev/null +++ "b/Ch08/item51/\353\251\224\354\204\234\353\223\234_\354\213\234\352\267\270\353\213\210\354\262\230\353\245\274_\354\213\240\354\244\221\355\236\210_\354\204\244\352\263\204\355\225\230\353\235\274.md" @@ -0,0 +1,95 @@ +# item51. 메서드 시그니처를 신중히 설계하라 + +참고) 메서드 시그니처(Method Signature) +- 메서드의 이름과 매개변수의 순서, 타입, 개수를 의미한다 +- 메서드의 리턴 타입이나 예외 처리는 메서드 시그니처가 아니다 + +## 메서드 시그니처를 설계하는 방법 +### 1. 메서드 이름을 신중히 짓자 +- 표준 명명 규칙(item 68)을 따른 것 +- 개발자 커뮤니티에서 널리 받으들여지는 이름을 사용할 것 +- 긴 이름은 피할 것 +- 애매하면 자바 라이브러리 API 가이드를 참고할 것 + +### 2. 편의 메소드를 너무 많이 만들지 말자 +- 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵다 +- 자주 쓰일 경우에만 만들고 확신이 서지 않으면 만들지 말 것 + +### 3. 매개변수 목록은 짧게 유지하자 +- 4개 이하를 유지할 것 +- 같은 타입의 매개변수 여러 개가 연달아 나오는 경우가 특히 해롭다 + - 실수로 순서를 바꿔 입력해도 그대로 컴파일되고 실행된다 + +### 매개변수 개수를 줄여주는 기술 세 가지 +1. 여러 메서드로 쪼개기 +```java +/* 지정한 범위의 부분 리스트에서 인덱스를 찾기 */ +findValue(int from, int to, Object value); // 전 + +nums.subList(start, end).indexOf(value); // 후 +``` + +2. 매개변수 여러 개를 묶는 도우미 클래스를 만들기([참고](https://github.com/depromeet/effective-java-study/blob/main/Ch04/item24/%EB%A9%A4%EB%B2%84%20%ED%81%B4%EB%9E%98%EC%8A%A4%EB%8A%94%20%EB%90%98%EB%8F%84%EB%A1%9D%20static%20%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A1%9C%20%EB%A7%8C%EB%93%A4%EB%9D%BC.md)) +```java +/* 카드 게임 */ +public class Deck { + public void shuffle() { } + + public void addCard(int suit, int rank) { } + + public void removeCard(int suit, int rank) { } +} +``` + +```java +/* 카드 게임 */ +public class Deck { + static public class Card { + private final int suit; // 무늬 + private final int rank; // 숫자 + } + + public void shuffle() { } + + public void addCard(Card c) { } + + public void removeCard(Card c) { } +} +``` + +3. 빌더 패턴을 적용한 객체를 메서드 호출에 응용하기([참고](https://github.com/depromeet/effective-java-study/blob/main/Ch02/item02/%EC%83%9D%EC%84%B1%EC%9E%90%EC%97%90_%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EA%B0%80_%EB%A7%8E%EB%8B%A4%EB%A9%B4_%EB%B9%8C%EB%8D%94%EB%A5%BC_%EA%B3%A0%EB%A0%A4%ED%95%98%EB%9D%BC.md)) +```java +Item item = Item.builder() + .user(user) + .song(song) + .albumCover(song.getAlbum().getAlbumCover()) + .content(itemCreateRequestDto.getContent()) + .build(); +``` + +### 4. 매개변수의 타입으로는 클래스보다는 인터페이스가 더 낫다 +- 인터페이스를 사용하면 유연함을 제공한다 +- List를 정렬하는 sort 메소드를 만든다면 List인터페이스를 매개변수로 사용하면 된다. 구현 클래스인 ArrayList나 LinkedList를 매개변수로 선언할 이유는 없다 +```java +/* Collections 클래스의 sort 메소드 */ +public static > void sort(List list) { + list.sort(null); +} +``` + +### 5. boolean보다는 원소 2개짜리 열거 타입이 낫다 +- 코드의 가독성과 안전성을 높혀준다 +```java +public class Temperature { + public Temperature(boolean isCelsius, double value) { } +} +``` + +```java +public class Temperature { + static public enum TemperatureScale { + FAHRENHEIT, CELSIUS;} + + public Temperature(TemperatureScale temperatureScale, double value) { } +} +``` \ No newline at end of file