Java. 접근제어자(AccessModifier)+setter, getter

kimkim·2024년 9월 27일

Java. 공부내용정리

목록 보기
31/38

접근제어자

: 자원(변수, 메서드 등)에 접근할 수 있는 권한을 설정한다.

접근제어자의 종류

  • public : 공용으로 모두 사용가능
  • protected : 상속 관계인 클래스와 같은 패키지(폴더) 안에 있는 클래스 안에 있는 객체끼리 사용가능
  • default : 같은 폴더 안에 있는 클래스끼리 사용가능하다
    • 클래스에 접근제어자가 없으면 default로 사용됨
  • private : 가지고 있는 클래스 안에서 사용가능하다. 외부공유 불가능

private 사용

: 객체의 변수에 잘못된 정보가 들어오면 메서드에서 에러가 난다.
: 그래서 변수의 변화로 메서드 에러를 방지하기 위해
: 클래스 변수 선언과 초기값에
: 접근제어자 private 를 사용하여 방지한다.

private가 붙은 변수 사용법

  • 변수 변화로 인한 매서드 에러를 방지하기 위해 private 사용하지만 변수를 변화시켜 메서드를 사용해야한다
  • 변수의 값을 설정하는 메서드를 만들어서 직접적으로 수정하는 것이 아닌 간접적으로 수정하도록 한다.
  • 변수의 값을 넣을 때는 Setter를 사용한다
  • 초기값이나 Setter로 변경된 변수 값을 받을 때는 Getter를 사용한다.

Setter, Getter 명명 규칙

  1. 형식 : public 변환타입 set변수명 (){}
  2. 변수명 규칙
    : set변수명 / get변수명
    : 변수명은 대문자로 시작 -> 카멜 표기법
    : 변수명 > 클래스의 변수 이름
  3. intellj에서 alt + ins를 누르면 Setter, Getter를 자동완성할 수 있다.

왜 매서드를 이용해 변수를 조작해야하는가

메서드는 로직을 짤 수 있어서 들어오면 안되는 변수의 값을 막을 수 있게 안정장치를 생성할 수 있다.

예시

public class AccessModifier {
	public static void main(String[] args){
    	
        Calculator c1 = new Calculator();
        c1.divide(); 
        // public로 이기 때문에 매서드는 접근 가능
        
        // 민약 변수가 public으로 바뀌고
        // c1.num2 =0; 넣으면 에러가 생김
        
        // 컴퓨터에서는 n/0은 계산할 수 없음
        // 누구나 접근해서 바꿔버릴 수 있게 한 것이 문제임
        // private를 이용해 Calculator의 데이터를 보호할 수 있다.

        
        // c1.num2 =0;이 num1이 private이라 접근 불가능
        c1.setNum1(10); // setNum1() 매서드는 Public이라 접근 가능
        c1.setNum2(0); 
        // 결과 : 0은 나눌 수 없습니다. 가본값인 1로 초기화합니다.
        // >> 잘못된 변수 접근값을 막을 수 있음

        c1.divide();
        // 결과 : 10
        // (10/0) 컴퓨터 세계에서 에러이지만 Num2를 1로 조정해서 10라는 결과가 나옴

        // System.out.println(c1.num1);
        // private이 있어 바로 출력 불가

        System.out.println(c1.getNum1());

    }
}
public class Calculator{
	// 클래스의 변수 초기값 고정
    private int num1 = 10;
    private int num2 = 2;
    
    public void divide (){
    	System.out.println(num1/num2);
    }
    
    
    // setter, getter
    // 1. setter
    public void setNum2(int num1){
    	this.num1 = num1
    }
    // 2. setter
    public void setNum2(int num1){
    	if(num2 == 0){
        	System.out println("0은 나눌수 없습니다. 기본값인 1로 초기화합니다.");
            num2 = 1;"
        }
        this.num2 = num2
    }
    // 3. getter
    public int getNum1(){
    	return num1;
    }
}

결론

  1. 객체 변수 만들 때는 외부의 접근으로 모든 메서드에 영향주지 않게 private를 사용하여 접근을 막는다
  2. 변수에 접근이 필요하면 getter setter 메서드를 public으로 만들어 사용한다.

0개의 댓글