인프런 커뮤니티 질문&답변

김경민님의 프로필 이미지
김경민

작성한 질문수

김영한의 실전 자바 - 기본편

static 메서드3

private static method를 사용하는 이유를 알고 싶습니다.

해결된 질문

작성

·

1.6K

·

수정됨

1

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]

private static method 를 사용하는 이유를 알고 싶습니다.

 

[질문 배경]
영한님의 다른 강의(스프링 강의로 기억합니다.) 중에 아주 단순한 기능을 private static method를 사용하셔서 만드신 걸 본적이 있었습니다. 왜 private 접근제어자를 사용하셨는데, 인스턴스 메서드가 아닌 static 메서드를 사용하셨을까? 궁금하여 여러 검색과 이리 저리 혼자서 생각도 많이 해보고 나름대로 정리했습니다만 뇌내 망상 수준이라.. 영한님의 답변만큼 확실한건 없을 것 같아 질문드립니다.

 

[검색 등을 통해 제가 정리한 내용]

  1. 속도 : 인스턴스 메서드의 경우에는 메서드 영역의 virtual table을 거쳐서 이 인스턴스에 매핑되는 메서드를 조회 후 메서드에 접근해야 하지만, static 메서드의 경우에는 그럴 필요가 없어 인스턴스 메서드에 비해 빠르다. -> 이 부분은 제가 여러 정보를 조합한 내용이라 신빙성이 떨어지고, 과연 속도 측면에서 유의미한 차이가 있을까 의문입니다.

  2. 객체지향기반의 커뮤니케이션 : private 접근제어자를 명시하여 캡슐화를 하였으나 static 까지 붙여 이 메서드는 내부에서만 쓸 뿐더러 객체지향적으로 대화할 의도가 없으니 거들떠도 보지 말아라 라는 의미를 담고 있는 것이 아니었을까 추측해봅니다.

 

답변 1

3

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 김경민님

static 메서드는 주로 해당 클래스 내부에서만 사용되며, 클래스의 인스턴스 상태와 관련이 없는 유틸리티 함수나 헬퍼 함수로 사용됩니다. 이러한 메서드는 클래스의 인스턴스와 독립적이기 때문에, 객체의 상태에 의존하지 않는 연산을 수행하는 데 적합합니다. private 접근 제어자를 사용함으로써, 이러한 메서드가 클래스 외부에서 사용되지 않도록 캡슐화를 강화하고, 클래스의 내부 구현을 숨깁니다. 이는 객체지향 설계 원칙 중 하나인 '캡슐화'를 강화하는 방법입니다.

쉽게 이야기하면 public으로 오픈한 static 메서드를 작성할 때 그 내부에서도 코드 중복 제거나, 더 읽기 좋은 s코드를 만들기 위해서 private 메서드가 필요한 경우가 있는데요. 이때 static 메서드를 사용합니다. 강의에서 말씀드린 것 처럼 static은 static만 호출할 수 있으니까요. 물론 해당 private static 메서드는 외부 클래스에 오픈하는 용도가 아니라 해당 클래스 내부에서만 사용할 용도입니다.

참고로 성능에 대한 부분은 너무 미미해서 거의 관계가 없다고 보시면 됩니다.

감사합니다.

김경민님의 프로필 이미지
김경민
질문자

감사합니다 영한님 정말 많은 도움이 되었습니다.

김경민님의 프로필 이미지
김경민

작성한 질문수

질문하기