[static 메서드3] 강의 보고 질문드립니다.
445
작성한 질문수 2
[static 메서드3] 강의 보고 질문드립니다.
import static 으로 특정 클래스의 메서드 적용해서 메서드 사용하는 것과 클래스 .(dot) 찍고 메서드 사용하는 것 중
실무에서는 어떻게 사용하는 편이 좋은지 궁금합니다.
답변 2
4
안녕하세요. 카드캡터솔쨩님
클래스 이름으로 접근하는 것과 import static 사용하는 것은 정답이 있다기 보다는 각각 장단점이 있습니다. 실제로는 한 클래스안에서도 두가지 방식을 함께 사용하는 경우도 있습니다.
클래스 이름으로 접근
장점
명확성: 메서드 앞에 클래스 이름이 명시되어 있어 어떤 클래스의 메서드인지 명확하게 알 수 있습니다. 이는 코드의 가독성과 유지보수성을 향상시킵니다.
단점
코드 길이: 클래스 이름을 매번 명시해야 하므로 코드가 더 길어질 수 있습니다.
import static 사용
장점
코드 간결성: 자주 사용되는 클래스의 정적 메서드나 상수에 대해 import static을 사용하면, 클래스 이름을 생략할 수 있어 코드가 더 간결해집니다.
가독성 향상: 특정 메서드나 상수가 코드 전체에서 자주 사용되는 경우, import static을 사용하면 코드가 더 읽기 쉬워질 수 있습니다.
단점
명확성 감소: 클래스 이름이 생략되면, 메서드가 어느 클래스에 속하는지 바로 알아보기 어려울 수 있습니다. 이는 특히 여러 클래스에서 동일한 이름의 메서드가 사용될 때 혼란을 초래할 수 있습니다.
유지보수의 어려움: 코드를 나중에 다시 보거나 다른 사람이 코드를 볼 때, 정적 임포트의 출처를 알기 어려워 유지보수가 어려워질 수 있습니다.
정리
클래스 이름을 통해서 현재 문맥에서 어떤 기능을 수행하는지 더 명확하게 이해할 수 있습니다.
예를 들어서 Order.create()라고 하면 Order라는 클래스 이름을 통해 주문을 생성한다는 것을 바로 이해할 수 있습니다. 그런데 단순히 create()라고만 되어 있다면 코드를 읽을 때 생각을 좀 해야겠지요?
반대로 import static이 더 유용한 경우도 있습니다. 예를 들어서 자주 사용하는 유틸리티 클래스 같은 것들이 있습니다. 문자가 null이 아니고 ""(빈문자)도 아닌 것을 체크하는 유틸리티 메서드가 있습니다. StringUtils.hasText()와 같은 것인데요. 이런 경우 항상 StringUtils라는 단어를 적지 않아도 개발자들이 이미 익숙한 유틸리티이고, hasText()라는 것 만으로도 충분히 문맥을 이해할 수 있기 때문에 이런 경우에는 클래스 이름을 생략하는 것이 가독성에 더 도움이 됩니다.
정리하자면 둘다 트레이드 오프가 있기 때문에 코드를 읽어 보았을 때 다른 개발자들도 더 쉽게 읽을 수 있는 방법을 선택하면 됩니다. 제가 추천하는 방법은 기본적으로 클래스 이름을 사용하고, 다만 방금 말씀드린 것 처럼 자주 사용되는 유틸리티 클래스의 메서드나 클래스 이름을 통한 문맥이 없어도 되는 경우에는 static import를 사용해서 코드를 간결하게 가져가는 것을 권장합니다.
감사합니다.
질문있습니다
0
31
1
1번 문제 질문입니다.
0
36
1
음악플레이어 문제 중 코드질문
0
30
1
9장 상속 문제와 풀이 질문
0
41
1
강의 자료에 사소한 오타가 있습니다.
0
53
2
매서드 참조값 반환??
0
71
1
접근제어자 - 쇼핑카트 문제에서 상품출력 부분 메서드
0
77
1
자바 기본편 - .(dot)에 관한 질문입니다!
0
87
1
공부방법
0
79
2
상속관계에서 멤버 변수는 오버라이딩 되는 개념이 아닌가요?
0
82
1
static method 질문
0
68
1
캡슐화 문제풀이 ShoppingCart 요구사항에 문제가 있어보입니다. 피드백 주세요
0
100
1
Method1에서 Student 객체
0
75
1
3강 18. null 질문
0
71
1
this 와 super의 호출 순서는 부모-자식관계 떄문만인가요?
0
79
1
팩토리 메서드 패턴과 일반 생성자 사용의 장단점
0
100
1
문의
0
105
1
9장 상속 문제와 풀이 부분 궁금한게 있어서 질문드립니다
0
94
1
상속과 그에 따른 메모리 구조 질문
0
68
1
call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다
0
77
1
수강기한
0
137
1
기본편 객체지향 프로그래밍에 대한 정의
0
90
1
섹션10 상속 메모리 구조 및 문제 관련 질문
0
90
1
추가 지식 학습
0
153
2





