접근자와 설정자(getter & setter)
- 생성된 인스턴스의 데이터(필드값)을 외부에서 자유롭게 읽고, 변경할 수 있다면, 데이터의 무결성이 깨질 수 있습니다.
- 클래스 외부에서도 값이 변경될 수 있다면 초기 설계 시 의도했던 데이터의 목적이나 범위를 벗어날 수 있기 때문입니다.
(예를 들어 학생 객체의 성적은 음수가 입력될 수 없도록 설계했는데 이를 외부에서 음수로 수정할 수 있다면 무결성이 깨지게 됨) - 이러한 문제점 때문에 객체지향 방식의 프로그램에서는 외부에서 인스턴스 필드를 private로 설정해 데이터에 대한 직접 접근을 막고 있습니다.
- 대신 클래스에서 필드 데이터에 접근하고 수정할 수 있는 메서드를 제공하여 이를 제어하는 방법을 활용하고 있습니다.
(메서드에서는 변경되는 데이터의 범위나 조건을 제어할 수 있기 때문) - 이러한 용도로 사용되는 메서드를 접근자와 설정자라고 합니다.
접근자(getter)
- 접근자는 특정 필드의 데이터 값을 반환하는 역할을 합니다.
- 필요한 경우 기존 데이터를 가공하여 목적에 맞는 값으로 반환시킬 수 있습니다.
접근자(getter)의 구조
// 필드 데이터
private 타입 변수이름;
// 접근자 메서드
// 메서드는 카멜케이스로 작성하기 때문에 변수이름 앞문자를 대문자로 변경 필요
public 타입 get변수이름() {
return 변수이름;
}
접근자(getter)의 예시
// 거리를 저장하는 필드 데이터
private double distance;
// 접근자 메서드 설정
public double getDistance() {
return distance;
}
// 추가적인 데이터 가공을 하는 경우
public double getDistance() {
double km = distance * 1000;
return km;
}
설정자(setter)
- 설정자는 특정 필드에 원하는 데이터 값을 입력하는 역할을 합니다.
- 필요한 경우 제어문을 활용하여 의도한 범위의 값이 아니면 입력이 안되도록 할 수 있습니다.
설정자(setter)의 구조
// 필드 데이터
private 타입 변수이름;
// 설정자 메서드
// 메서드는 카멜케이스로 작성하기 때문에 변수이름 앞문자를 대문자로 변경 필요
public void set변수이름(타입 변수이름) {
this.변수이름 = 변수이름;
}
설정자(setter)의 예시
// 거리를 저장하는 필드 데이터
private double distance;
// 설정자 메서드 설정
public double setDistance(double distance) {
this.distance = distance;
}
// 입력 조건을 설정하는 경우
public void setDistance(double distance) {
// 입력값이 0보다 작은 경우 입력 불가 메시지를 출력
// 0보다 클경우 필드값에 데이터 입력
if(distance) < 0 {
System.out.println("거리는 음수가 될 수 없습니다");
}
else {
this.distance = distance;
}
}
일반적인 클래스의 접근자 제어자 예시
접근자와 설정자 사용 예시
public class StudentInfo {
// 필드 영역
private int studentId;
private String name;
private char grade;
// 컨스트럭터 영역
public StudentInfo() {
}
// 메서드 영역
// studentId를 반환하는 get메서드
public int getStudentId() {
return studentId;
}
// studentId를 설정하는 set메서드
public void serStudentId(int studentId) {
this.studentId = studentId;
}
// name을 반환하는 get메서드
public String getName() {
return name;
}
// name을 설정하는 set메서드
public void serStudentId(String name) {
this.name = name;
}
// grade를 반환하는 get메서드
public char getGrade() {
return grade;
}
// grade를 설정하는 set메서드
public void serGrade(char grade) {
this.grade = grade;
}
}
'Programing Language > Java' 카테고리의 다른 글
[Java] 부모 클래스 생성자 호출(Inheriting Constructor) (0) | 2022.09.05 |
---|---|
[Java] 외부 클래스(External Class) (0) | 2022.09.05 |
[Java] 자바 수학 관련 클래스(Java Math Class) (0) | 2022.07.23 |
[Java] 자바 기본 자료형 관련 클래스(Java Wrapper Class) (0) | 2022.07.22 |
[Java] 자바 문자열 관련 클래스(Java String Related Classes) (0) | 2022.07.22 |