728x90
일반적으로 객체 지향 프로그래밍에서는 객체의 필드를 객체 외부에서 직접적으로 접근하는 것을 막는다.
왜냐하면 외부에서 마음대로 변경할 경우 객체의 무결성(의도하지 않은 요인에 의해 데이터, 시스템 등이
변경되거나 손상되지 않고 완전성, 일관성 등을 보장하는 특성)이 깨질 수 있기 때문이다.
예를 들어서 나이나 속도는 음수가 될 수 없는데 외부에서 음수로 변경한다면 무결성이 깨지게 되는 것이다.
그렇기 때문에 객체 지향 프로그래밍에서는 메소드를 통해서 필드를 변경해야 한다.
클래스를 선언할 때 필드(멤버 변수)는 private로 선언해서 외부로부터 보호하고,
필드는 getter와 setter 메소드를 이용해서 읽어오고 사용하는 것이 좋다.
그렇다면 getter와 setter가 무엇일까?
getter와 setter
먼저 getter는 외부에서 객체의 데이터를 읽을 때 사용하는 메소드로
필드값을 반환해야하기 때문에 return이 필요하다.
public int getAge() {
return age;
}
setter는 외부에서 메소드를 통해 필드에 접근해서 값을 바꿀 수 있는 메소드로
필드값을 설정해야하므로 매개변수가 필요하다.
public void setAge(int age) {
if(age<1) {
this.age = 1;
}else {
this.age = age;
}
}
위의 코드는 나이는 1살보다 작을 수 없으니 나이가 1살보다 작을 경우 1살로 설정하는 것을 의미한다.
아래의 코드는 getter와 setter를 사용한 전체 코드 예제이다.
public class Example {
private int age; // 필드는 외부에서 접근하지 못하도록 private로 설정
public int getAge() {
return age;
}
public void setAge(int age) {
if(age<1) {
this.age = 1;
return; // 메소드 실행 종료
}else {
this.age = age;
}
}
}
public class Test {
public static void main(String[] args) {
Example ex = new Example();
ex.setAge(-10);
System.out.println("나이 : " + ex.getAge() + "살");
ex.setAge(10);
System.out.println("나이 : " + ex.getAge() + "살");
}
}
// 결과
나이 : 1살
나이 : 10살
만약 외부에서 필드값을 읽기만 하고 변경하지 못하도록 하려면 gsetter 메소드를 private로 설정하면 된다.
getter와 setter 한 눈에 보기
getter
접근 제한자 | public |
리턴 타입 | 필드 타입 |
메소드 이름 | get + 필드 이름(첫 글자는 대문자) |
리턴값 | 필드값 |
setter
접근 제한자 | public |
리턴 타입 | void |
메소드 이름 | set + 필드 이름(첫 글자는 대문자) |
매개변수 타입 | 필드 타입 |
728x90
'국비 지원 > JAVA' 카테고리의 다른 글
[JAVA] 부모 생성자 호출 super() / 부모 메소드 호출 super (0) | 2023.05.15 |
---|---|
MVC란 무엇일까? 또, DAO와 DTO, VO는 무엇일까? (0) | 2023.05.14 |
[JAVA] 접근 제한자 (0) | 2023.05.13 |
[JAVA] 오버로딩과 오버라이딩 (0) | 2023.05.13 |
[JAVA] 인스턴스 멤버, 정적 멤버 - static (0) | 2023.05.13 |