메서드가 한 가지 기능만 담당하게 하면 장점이 무엇이 있을까?
이름 짓기가 편해진다.
기능의 단위가 짧고 명확할수록 기능을 대변하는 이름 짓기도 수월합니다. 잘 지은 메서드 명은 코드의 가독성을 증가시키고 유지 보수를 수월하게 해 줍니다.
이름의 길이는 중요하지 않습니다. 축약된 단어를 쓰지 말고, 메서드가 수행하는 기능을 잘 대변할 수 있는 이름을 짓는 것이 중요합니다.
또한, 메서드 네이밍 컨벤션을 지키며 코드를 작성하는 것이 도움이 됩니다. 메서드 네이밍 컨벤션은 코드를 작성할 때 일관성 있고 명확한 메서드 이름을 사용하기 위한 규칙이며, 이를 준수하면 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.
기능 재사용성에 따른 유지보수가 쉬워진다.
private boolean checkPlayerHpZero(BossMonster bossMonster, Player player) {
if (player.playerHpZero()) {
OutputView.printFailGameStatus(bossMonster, player);
OutputView.printPlayerHpZero(player.getName());
return true;
}
return false;
}
이 메서드는 player에 HP가 Zero인지 확인하는 동시에 출력을 하는 걸 볼 수 있습니다.
이와 같이 2가지 이상의 기능이 들어가면 상대방이 보기에 한번 더 생각해야 할 여지가 있을 수 있을 거 같습니다.
여기서 만약 요구사항이 바뀌었다고 가정하면, 이 메서드는 쉽게 바꿀 수 있겠지만 만약 복잡한 로직이 들어가면 어디서부터 건드려야 할지 모를 때도 있을 거 같습니다.
private boolean checkPlayerHpZero(Player player) {
return player.playerHpZero();
}
private void printPlayerFail(BossMonster bossMonster, Player player) {
OutputView.printFailGameStatus(bossMonster, player);
OutputView.printPlayerHpZero(player.getName());
}
이런 식으로 메서드 분리를 하고 만약 checkPlayerHpZero가 true면 printPlayerFail 메서드를 실행하면 되겠죠!
한눈에 어떤 기능을 담당하는지 알 수 있다.
위에 코드로 예를 들면, checkPlayerHpZero라는 메서드는 player의 HP가 Zero인지를 확인하는 메서드인지 한 눈에 알 수 있겠죠!
단위 테스트가 수월해진다.
단위 테스트가 수월해지는 장점도 있을 거 같습니다! 오직 check만 하는 메서드 이므로 player만 주입해 주고 true인지 false인지만 확인하면 되니까 수월해질 수 있다고 생각합니다!
한 가지 메서드가 한 가지 기능만 확인하는 방법
1. 한 메서드의 총길이를 확인해 본다.
메서드를 작성할 때 가장 좋은 라인 수는 5~10줄이라고 합니다. 자기 만의 기준을 세우고 의식적인 연습을 하면 좋을 거 같습니다.
ex) 한 메서드의 길이는 최대 10줄이 넘지 않게 짤 거야!
2. 코드를 읽었을 때 메서드 분리가 가능할 거 같으면 분리를 한다
인텔리제이에는 메서드 분리 기능이 있습니다.
맥 기준으로 command + option + m ⇒ 메서드 분리 기능
3. 파라미터의 개수를 정한다.
저가 세운 기준은 파라미터를 최대 2개만 사용하는 것입니다.
파라미터가 많으면 그만큼 의존하는 것도 많으므로 파악하는 시간이 더 걸릴 수밖에 없습니다. 줄여보는 연습을 해보는 게 좋습니다!
4. 네이밍에 맞는 기능을 하는지 확인해 본다.
check와 is가 들어간 네이밍은 오직 boolean이 논리적으로 맞다고 생각합니다.
5. depth를 고려해 본다.
depth가 많다는 것은 한 가지 기능을 안 할수도 있다는 증거 일수도 있는데요!
의식적으로 depth를 정해놓고 그것을 지키는 연습을 할 수도 있을 거 같아요.
6. 자신만의 기준을 정하기
다른 분들의 코드나 서적을 보면 형용되는 스타일이 있는데 이를 보며 자신만의 기준을 정하는 게 좋습니다!
자신만의 기준을 정해 의식적으로 계속 연습을 하고 확인하는 습관을 들이다 보면 어느 순간 성장한 자신을 볼 수 있을 겁니다!
추가적으로, 상대방이 보면 이 메서드가 어떤 기능을 하는지 알 수 있을까?라는 생각을 하면서 짜면 연습에 많이 도움 될 것입니다!
'JAVA' 카테고리의 다른 글
UncheckedException과 CheckedException (1) | 2024.09.13 |
---|---|
ArrayList는 어떻게 크기가 조절될까? (0) | 2024.09.11 |
Garbage Collection(GC) 더 자세히 살펴보기 (0) | 2024.09.09 |
Java final과 불변성 (0) | 2024.09.08 |
가비지 컬렉션이란? (1) | 2024.09.06 |
제네릭이란? (2) | 2024.09.04 |
인터페이스와 추상 클래스 (3) | 2024.09.03 |
좋은 코드를 위한 네이밍 기법들 (0) | 2023.09.27 |