-
학습목표
접근제어 지시자
public --> 어디에서든 접근 가능함.
default ----> 같은 패키지 내에서 접근 가능
protected <- 상속 배운 이후
private ---> 해당.java 안에서만 접근이 가능하다.
포인트
객체에 상태 값은 행위를 통해서 변경 시키는 것이 객체 지향 코드 방법이다.
get : read-only 성질을 가진다 .
set : 개발자 선택에 의해서 만들 수 있고, 방어적 코드를 작성할 수 있다.그림과 같이 int balance 변수 앞에 private을 선언하였다.
balance 변수에 값을 넣을려고 해도 오류가 뜬다.
즉 해당 .java안에서만 접근이 가능하다.
이는 객체 데이터를 외부에서 읽고 변경 시 객체 의 무결성이 깨질 수 있기 때문이다.
ex)자동차 속도는 음수 불가, 하지만 외부에서 음수로 설정하면 객체 무결성이 깨진다.
따라서 객체 지향 프로그래밍에서는 메소드를 통해 데이터를 변경하는 방법을 선호한다.
get,set 선언방식(검증코드 / 변환 코드는 필요에 따라 추가한다.)
get- 접근 제한자 : public- 리턴 타입 : 필드의 리턴 타입- 메소드 이름 : get + private 선언한 필드이름(앞에 대문자여야한다)
- 리턴값 : 필드값
set
접근제한자 : public
리턴 타입 : void
메소드 이름 : set + private 선언한 필드이름(앞에 대문자여야한다)
메개 변수 타입 : 필드 타입
get,set 개념을 잡아보기 위해 자동차 속도를 예로 들어서 코드소스를 작성 해보았다.
package ch07; public class Car { //필드 private int Speed; //생성자 //메소드 public int getSpeed() { return Speed; } public void setSpeed(int Speed) { if(Speed < 0) { this.Speed = 0; return; }else { this.Speed = Speed; } } }
package ch07; public class CarExample { public static void main(String[] args) { Car myCar = new Car(); //객체 생성 //잘못된 속도 변경 myCar.setSpeed(-50); System.out.println(myCar.getSpeed()); //0 출력 //올바른 속도 변경 myCar.setSpeed(60); System.out.println(myCar.getSpeed()); //60출력 } }
위의 소스 코드를 보면 자동차 속도에 음수가 사실상 들어갈수 없기 때문에 private으로 직접적인 접근을 할수 없도록 막고 set 메서드를 통해 자동차가 음수값이 안나오게 검증을 하고 getter 메소드를 통해 값을 가져온다.
이와 같이 setter와 getter 메소드를 이용하면, 원치 않는 필드 값이 입력되는 불상사를 손쉽게 막을 수 있다.'Java' 카테고리의 다른 글
static (0) 2023.02.13 this (0) 2023.02.13 객체와 객체간에 상호작용 (0) 2023.02.12 생성자 (0) 2023.02.12 함수와 스택 메모리 (0) 2023.02.12