티스토리 뷰

Java

[JAVA]setter&getter

TreeBomb 2023. 12. 15. 16:37

setter & getter 란?

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

- 예를 들어 자동차의 속도가 음수가 될 수 없는데, 외부에서 음수로 설정하면 무결성이 깨진다.

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

- 데이터는 외부에서 접근하지 않도록 막고, 메서드는 공개를 해서 외부에서 메서드를 통해 데이터를 접근하도록 유도한다.

 

외부에서 직접적으로 접근하지 못하게 필드를 선언하는 방법

저번글에서 접근제한자에 대해 배웠다 접근제한자 기억나지 않는다면 

 

[JAVA] 메서드(method)

변수의 생명주기 메서드를 자세히 보기 전에 변수의 생명주기에 대한 이해가 필요하다. 변수 종류 생명주기 지역변수 지역변수를 선안한 중괄호 내에서만 유효하다. 매개변수(파라미터) 메서드

treebomb-code.tistory.com

이 글을 다시 읽어보자. 

접근제한자를 활용하여 변수를 선언해 보자

public class Car {
	private int speed;	//메인에서 접근하지 못하게 private를 붙임
}

private는 현재 클래스 내에서만 접근을 허용하는 접근제한자이다.

이제 setter와 getter 메서드를 만들어보자.

setter

	//setter
	//외부에서 메서드를 통해 필드에 접근하고 검증할 수 있도록
	//유도하는 것
	
	public void setSpeed(int s) {
		if(s < 0) {
			speed = 0;
			return;
		} else {
			speed = s;
		}
	}

setspeed가 setter고 getspeed가 getter이다. 위에서 설명했듯이 속도는 0이 될 수 없기 때문에 setter를 통해 규칙을 선언해 주는 것이다. 파라미터(매개변수)로 받은 값이 0 미만이라면 speed를 0으로 만들고 그것이 아니라면 다 양수이기 때문에 speed를 s(파라미터)로 설정해 주는 기능이다.

getter

	//getter
	//private으로 설정된 필드를 객체 외부에서 값을 불러오기 위해
	//구현하는 메서드를 getter라고 한다.
	//private 필드는 객체 외부에서는 접근이 불가능 하지만, 필드가
	//선언된 클래스에서는 어디서든 접근이 가능하다.
	//메서드를 통해서 필드에 들어있는 값을 반환받을 수 있다.
	
	public int getSpeed() {
		return speed;
	}

private 설정한 필드는 외부에서 필드 자체를 불러오는 것이 불가능하기 때문에 getter메서드를 만들어서 값을 반환을 해줘야 한다. 코드는 매우 간단한 것을 확인할 수 있다.

 

실행용 클래스에서 확인하기

코드

public class CarMain {
	public static void main(String[] args) {
		Car c1 = new Car();
		c1.setSpeed(-30);
		System.out.println("차의 속도 : " + c1.getSpeed());
        
		c1.setSpeed(70);
		System.out.println("차의 속도 : " + c1.getSpeed());
	}
}

결과

차의 속도 : 0
차의 속도 : 70

처음에 setter에 음수를 넣었지만 speed가 음수가 아닌 0으로 들어간 것을 보며 정상적으로 작동하는 것을 확인할 수 있다.

 

setter&getter 쉽게 만들기

public class GetSetter {
	private int num1;
	private char c1;
}

예를 들어 이런 코드가 있다고 가정해 보자.

이클립스에서는 setter와 getter를 자동으로 만들어주는 기능을 제공하고 있다.

우클릭을 누른 후 Source로 들어가면 Generate Getter and Setters가 나온다 저걸 누르면

이런 창이 나오는데 안에 보면 우리가 private로 만든 c1과 num1이 있는 걸 확인할 수 있다.

여기서 getter&setter를 만들고 싶은 것들을 체크하고 Generate를 해주면 된다.

그럼 자동으로 getter와 setter가 만들어지는 것을 확인할 수 있다.

 

다음 글에서는 생성자를 확인해 보자.

 

[JAVA] 생성자(Constructor)

생성자란? - 클래스를 구성하는 구성요소중 하나인 생성자는 객체를 생성할 때 호출되어 객체의 초기화를 담당하는 특별한 메서드다. - 객체를 생성하고 초기화 하기 위해서는 반드시 생성자를

treebomb-code.tistory.com

 

'Java' 카테고리의 다른 글

[JAVA] 오버로딩(OverLoading), this, this()  (0) 2023.12.20
[JAVA] 생성자(Constructor)  (0) 2023.12.19
[JAVA] 메서드(method)  (0) 2023.12.14
[JAVA]클래스(Class)  (0) 2023.12.13
[JAVA]배열2(Arrays)  (0) 2023.12.01