JAVA

Java Getter, Setter

GSJun 2023. 5. 29. 11:39

오늘은 Java의 Getter, Setter 함수에 대해서 다뤄볼 것이다.

 

객체 지향 프로그래밍에서는 캡슐화로 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막는다

 

이는 객체 데이터를 외부에서 읽고 변경 시 객체의 무결성이 깨질 수 있기 때문이다

예) 자동차의 속도는 양수인데, 만약 외부에서 음수로 설정하게 되면 객체 무결성이 깨짐

 

따라서 객체 지향 프로그래밍에서는 메소드를 통해 데이터를 변경하는 방법을 선호한다

 

데이터는 외부에서 접근하는 것을 막고, 메소드는 공개해 외부에서 메소드를 통해 데이터를 접근하도록 한다

(여기서 굳이 메소드로 접근하는 이유는 메소드는 매개값을 검증해서 유효한 값만 데이터로 저장할 수 있기 때문이다)

 

데이터를 외부에서 막는 역할은 접근 제어자중 private으로 하고 (클래스 내부에서만 사용 가능)

메소드를 통해 데이터에 접근하여 변경 역할을 하는 메소드는 Setter 메소드 이다

 

외부에서 객체의 데이터를 읽을 때는 getter 메소드를 사용한다

예제

public class Car {
private String carName;
private String company;
private String price;

public String getcarName() {
return carName; //getter 함수로 인식하지 못함
}
public String getCarName() {
return carName;
}

public void setCarName(String carName) {//파라미터의 이름도 똑같이 carName으로 함 -> 이는 약간 java의 암묵적인 룰 (다른 걸로 바꿔도 됨)
this.carName = carName; //this를 통해 실제 값 넣어줌
}

public String getCompany() {
return company;
}

public void setCompany(String company) {
this.company = company;
}

public String getPrice() {
return price;
}

public void setPrice(String price) {
this.price = price;
}
}

java 메인 함수 클래스

public class CarTestMain {
public static void main(String[] args) {
Car car = new Car();
car.setCarName("소나타");
car.setCompany("현대");
car.setPrice("3500만원");

System.out.println("이름 : "+car.getCarName()+" 제조사 : "+car.getCompany()+" 가격 : "+car.getPrice());
}
}

 

Getter, Setter 메소드 이름 규칙

 

메소드의 종류

1. 매개 변수 O, 리턴 값 O

2. 매개 변수 O, 리턴 값 X

3. 매개 변수 X, 리턴 값 O

4. 매개 변수 X, 리턴 값 X

 

Getter 메소드

  - 접근 제어자 : public

  - 메소드 이름 : get + 필드명(카멜 표기법)

  - 리턴 타입 : 필드의 리턴 타입

  - 리턴 값 : 필드 값

  - 매개 변수 : X

Getter 메소드는 값을 읽는 역할만 수행해야 함으로

매개변수는 없고 리턴 값이 있는 구조의 메소드 이다. (매소드 3번 구조)

 

Setter 메소드

  - 접근 제어자 : public

  - 메소드 이름 : set + 필드명(카맬 표기법)

  - 리턴 타입 : void

  - 매개 변수 타입 : 필드 타입

Setter 메소드는 값을 변경하는 역할만 수행해야 함으로

매개변수는 있고 리턴 값은 없는 구조의 메소드 이다. (메소드 2번 구조)

 

외부애서 필드값을 읽을 수만 있고, 변경하지 못하도록 하려면(읽기 전용)

Getter 메소드만 선언하거나, Setter 메소드를 private 접근 제어를 사용해 선언한다.