먹었으면 뇌를 쓰자
자바 헬퍼 메소드(Helpler method) 쉽게 이해하기 본문
요즘 김성렬 교수님의 JPA 강의에 푹 빠져있다.
교수님께서 강의를 하시며 '헬퍼 메소드'를 자주 언급하시는데,
어떤 개념인지 잘 이해가 안 갔다.
자바 개념의 명칭은 직관적인 것들이 많다.
Helper method 니까 뭔가 도와주는 메소드구나
라고 두루뭉술하게 넘어가다보니 한계가 와서
Nathan Schutz 라는 유튜버의 짧은 강의를 들어보았다.
Helper method
a method helping another method inside of a class and it can only be accessed from inside the class it is in
헬퍼 메소드는 자기 클래스 안의 다른 메소드를 도와주는 기능을 하며, 자기 클래스에서만 호출 가능하다.
일반 메소드와 헬퍼 메소드의 가장 큰 차이는 '다른 클래스에서의 호출 가능 여부'이다.
Situation 1. 일반 메소드가 외부 클래스에서 호출되다
Example 1. If people are in the same classroom, they do not need the classroom name.
Example 2. If people are in a different classroom, they do need the classroom name.
이 상황을 자바에 대입해보면
Example 1. If methods are in the same class, they do not need an identifier name.
Example 2. If methods are in a different class, they do need an identifier name.
Student 클래스에는 이름, 나이, 성적을 반환하는 getName, getAge, getGPA 메소드가 있다.
StudentRunner 클래스는 이 세 가지 메소드를 호출할 수 있다.
세 메소드는 public, 즉 어떤 클래스에도 호출 가능하도록 선언되었기 때문이다.
StudentRunner 클래스는 Student 클래스의 인스턴스 'stu'를 만들어 호출한다.
세 메소드가 자기들의 Student 클래스가 아닌 외부 클래스에서 호출될 경우,
외부 클래스에서 호출된 인스턴스 주소명(=identifier name)을 찾아가야 한다.
따라서 <1>과 같이 stu.getName / stu.getAge / stu.getGPA 를 통해 사용된다.
한편, 세 메소드의 기능은 거의 동일하다고 볼 수 있다. return 값만 반환하기 때문이다.
그렇다면 세 메소드의 기능을 통합한 getInformation 메소드를 만들 수 있다.
자기들의 Student 클래스 안에서는 원래대로 getName / getAge / getGPA 를 통해 사용된다.
굳이 쓰자면 '자기 클래스 주소명'을 뜻하는 this를 붙여 this.getName / this.getAge / this.getGPA 도 가능하다.
Situation 2. 헬퍼 메소드가 만들어지다
Average 클래스에는 sum 변수(num1 + num2 + num3)를 3으로 나누는 getAverage 메소드가 있다.
AverageRunner 클래스는 이 메소드를 호출할 수 있다.
이 메소드는 public, 즉 어떤 클래스에도 호출 가능하도록 선언되었기 때문이다.
AverageRunner 클래스는 Average 클래스의 인스턴스 'three'를 만들어 호출한다.
이 메소드가 자신의 Average 클래스가 아닌 외부 클래스에서 호출될 경우,
외부 클래스에서 호출된 인스턴스 주소명(=identifier name)을 찾아가야 한다.
따라서 three.getAverage 를 통해 사용된다.
여기까지는 아까 설명한 Situation 1과 동일한 상황이다.
그런데,
getAverage 메소드 내부에서 sum 변수가 직접 더하기 연산을 하는 것이 비효율적인 상황이 왔다.
그래서 sum 변수의 더하기 연산을 하나의 메소드(=helper method)로 만들게 되었다.
sumThree 메소드를 만들어 더하기 연산을 하도록 하고,
sum 변수는 이 메소드의 return 값이 되도록 다시 정의했다.
sumThree 메소드는 private, 즉 Average 클래스 내부에서만 호출될 수 있다.
AverageRunner 클래스는 getAverage 메소드(public)는 호출할 수 있지만,
getAverage 메소드의 헬퍼 메소드인 sumThree 메소드(private)는 호출할 수 없다.
한 번 더 정리하자면
Helper method: is declared private and strictly for use inside of the class that it is in
라고 할 수 있는 것이다.
'Framework > JPA' 카테고리의 다른 글
Query dsl - Querying, Join, Paging 구현하기 (+query dsl 5.0.0 fetchResult count 쿼리 작성) (0) | 2022.11.29 |
---|---|
3초 만에 이해하는 @OneToMany 연관관계 헬퍼 메소드 쓰는 법 (0) | 2022.11.28 |
자바 기본 생성자, 인수 생성자는 같이 입력해야 한다 왜냐면... (0) | 2022.11.28 |
JPQL TypedQuery 화면 출력할 때 "이것" 꼭 해줘야 한다 (0) | 2022.11.28 |
자바에서 getter and setter 쓰는 이유 (0) | 2022.11.28 |