꾸양!
일단 시작.
꾸양!
💁‍♀️ 깃허브 링크
전체 방문자
오늘
어제
  • 분류 전체보기 (112)
    • STUDY (85)
      • JAVA (36)
      • Algorithm (1)
      • SpringBoot (9)
      • SQL (4)
      • GIT (16)
      • Front (1)
      • JPA (9)
      • Trouble Shooting (9)
    • SPARTA Project (26)
      • WIL (14)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 잔디돌려줘
  • 인프런
  • 코드효율성
  • 인프콘2024
  • 클린코드
  • 프로그래머스
  • Repository
  • 트러블슈팅
  • 랠릿
  • intellij
  • 숫자짝꿍

최근 댓글

최근 글

hELLO · Designed By 정상우.
꾸양!

일단 시작.

STUDY/JAVA

[TIL] Getter와 Setter. 왜 쓸까?

2023. 6. 12. 23:09
<< 목차 >>
Getter와 Setter에 대한 내 과거의 생각
Getter와 Setter를 쓰는 이유

Getter와 Setter에 대한 내 과거의 생각

자바로 키오스크를 구현했을 때나, 호텔 예약 프로그램을 구현했을 때나 드는 생각이 있었다.

왜 Getter와 Setter를 쓰는 것인가.

내가 헷갈린 이유는 이렇다. 아래 코드를 보자. name, company를 필드로 가지는 Car 클래스가 있다.

public class Car {
    String name;
    String company;

    public Car( String name, String company ) {
        this.name = name;
        this.company = company;
    }

    public String getName() {
        return name;
    }
}

 이 클래스에서 내가 name이라는 값을 얻고 싶을 때,

public class Main {
    public static void main( String[] args ) {
        Car car = new Car( "carName","carCompany" );
        System.out.println(car.name);
        System.out.println(car.getName());
    }
}

이렇게 car.name으로 name 값을 얻어오나, getName() 메서드, 즉 Getter로 name 값을 얻어오나 사실 똑같은 거 아닌가. 라고 생각했다.

그래서 괜히 메서드(그 때는 Getter와 Setter가 단순한 메서드라고 생각했다.)를 괜히 늘리는 거 같은데? 싶기도 했고, 바로 변수를 불러와 값을 구해오는게 더 깔끔해보였기 때문에 Getter와 Setter를 쓰지 않았다.

프로젝트가 끝난 후 튜터님께서 해주시는 리뷰 영상을 보는데 튜터님은 Getter와 Setter를 쓰셨기에 궁금해서 튜터님께 직접 DM을 드려 이유를 여쭤 보았다.


Getter와 Setter를 쓰는 이유

위 코드에서 name과 getName()은 같은 데이터지만, Getter와 Setter를 썼을 때의 이점이 있다.

1. 캡슐화

Getter와 Setter를 쓰면 변수를 private으로 정의해줄 수 있다. private 변수의 장점은 변수를 캡슐화 해준다는 것! 밖에서 그 변수에 접근하려면 Getter나 Setter를 사용해야만 한다. 그러니 클래스 내부의 변수 데이터를 보호할 수 있고, 그 변수를 사용하는 의도가 분명해진다.(조회 or 재설정) (여기서 머리가 띵 했다. 이 부분에 대해서는 나도 공부를 안 한 것도 아니라서 조금만 더 생각하면 알 수 있었을 텐데 아쉬웠다.) 또한, Setter 함수 내부에 유효성 처리도 할 수 있다. 이상한 데이터로 변수를 지정하려고 할 때 막아줄 수 있다.(이 이유도 듣고 나서 와 진짜 그러네. 라고 바로 이해했다..)

2. 코드 컨벤션

Java에도 공통 코드 컨벤션 같은 것이 있다. 코드 컨벤션이란 누구라도 코드를 읽을 때 비슷한 흐름으로 읽을 수 있도록 코드 구현에 나름에 규칙을 부여하는 것이다. 예를 들면, 이런 것이다.

if(true){	

} else {		// 닫는 중괄호('}') 뒤에 else 를 쓴다.

}			// 블럭을 종료할 때는 새 줄을 삽입하고 '}'를 사용하여 종료한다.

대다수의 회사에서는 캡슐화의 이점 때문에 자기 회사의 코드 컨벤션에 Getter와 Setter 항목을 넣어둔다.

이 두 가지 이유로 Getter와 Setter를 쓰는 것이다..!


어쩌면 나도 시간을 들여 고민해 봤다면 이유를 생각해 냈을 수도 있다. 하지만 그 시간을 아껴 튜터님께 이해가 쏙 되는 답변을 듣는 것도 나쁘지는 않은 것 같다. 오히려 내가 다른 사람들에게 설명할 수 있을 정도로 이해가 되어 버려서 너무 좋았다.

다음 프로젝트 때는 꼭 Getter와 Setter를 이용하여 캡슐화도 해 보고, Setter 메서드 내부에 유효성 처리도 한 번 생각해 봐야겠다!

저작자표시 (새창열림)

'STUDY > JAVA' 카테고리의 다른 글

[TIL] < 자바의 정석 > 예제 HighLow - 예외처리해보기  (0) 2023.06.15
[TIL] printStackTrace()는 왜 아래에 찍힐까?  (0) 2023.06.14
[TIL] 프로그래머스 - 최댓값과 최솟값 ( 느려지게 하는 범인 찾기 )  (0) 2023.06.11
[TIL] I/O Study - ByteArrayInputStream 예제 01  (0) 2023.06.08
[TIL] 잘못 알았던 재귀함수  (0) 2023.06.05
    'STUDY/JAVA' 카테고리의 다른 글
    • [TIL] < 자바의 정석 > 예제 HighLow - 예외처리해보기
    • [TIL] printStackTrace()는 왜 아래에 찍힐까?
    • [TIL] 프로그래머스 - 최댓값과 최솟값 ( 느려지게 하는 범인 찾기 )
    • [TIL] I/O Study - ByteArrayInputStream 예제 01
    꾸양!
    꾸양!
    차근차근 한 발자국씩.

    티스토리툴바