C++과 JAVA에서는 클래스를 만들어 프로그램을 제작한다.

하지만 만들어진 인스턴스에 다른 작업에서 접근하여 클래스 내부를 수정하게 되면 큰 문제가 발생할 수 있다.

하지만 C++ / JAVA 인스턴스 변수 또는 메소드에 접근을 제어하는 접근 제어자를 설정할 수 있다. 이를 통해

클래스의 캡슐화(정보은닉) 을 실현할 수 있다.

 

JAVA의 접근 제어자에는 4종류가 있다.

 

1. public

다른 클래스에서 생성한 인스턴스를 통해 제한 없이 멤버에 접근하여 사용할 수 있는 제어자.

단, static 멤버의 경우는 인스턴스 없이도 접근 가능

 

2. default (package - private)

같은 패키지에서만 접은을 허용하는 제어자.

접근 제어자를 별도로 정해주지 않는다면 기본으로 적용된다.

즉, void func() 는 default void func() 과 같은 의미다.

 

3. protected

같은 패키지, 다른 패키지여도 상속받은 하위 클래스에서는 사용할 수 있는 제어자.

※ protected를 이해하기 위해서는 상속에 대한 이해가 필요하므로 추후 상속에서 다루기로 한다.

 

4. private

클래스 내부에서만 접근하여 사용할 수 있도록 하는 제어자.

 

위의 순서는 접근이 가능한 범위가 넓은 순으로 작성하였다. 즉, public 으로 선언된다면 인스턴스를 통해

어디서나 접근이 가능하며 반대로 private 로 선언된다면 클래스 외부에서는 접근이 불가능하다.

 

접근 제어 가능한 범위

<소스 코드>

점수를 입력받아 합격 여부 및 A ~ F 로 변환해주는 프로그램이다.

자세한 설명은 주석을 참고한다.

 

package com;
import java.util.Scanner;
public class Branch {
	/* 점수 입력 받아서 합격 불합격 처리용 클래스 */
	private int score;		
	
	void inputScore() {	// 접근제어자가 없으므로 default 로 선언됨
		Scanner scan = new Scanner(System.in);
		score = scan.nextInt();
	}
	
	private void printPass() {	// private 메소드 선언
		if(score >= 60) System.out.println(score+" : 합격 ");
		else 	System.out.println(score+" : 불합격 ");
	}
	
	private void printGrade() {
		if(score >= 90) System.out.println(score+" : A ");
		else if(score <= 89 && score >= 80) System.out.println(score+" : B ");
		else if(score <= 79 && score >= 70) System.out.println(score+" : C ");
		else if(score <= 69 && score >= 60) System.out.println(score+" : D ");
		else if(score <= 59 ) 	System.out.println(score+" : F ");
		else 	System.out.println(score+" 는 잘못된 값입니다. ");
	}
	
	public void playBranch() { // private로 선언된 메소드에 접근할 수 있는 public형 메소드
		inputScore();
		printPass();
		printGrade();
	}
}
 
package com;
public class UseClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Branch bc = new Branch();	// 인스턴스 생성
		bc.playBranch();
	}
}
 

실행 화면

 

'JAVA' 카테고리의 다른 글

배열 / foreach 사용  (0) 2022.08.28
import  (0) 2022.08.28
Package  (0) 2022.08.28
MVC 패턴  (0) 2022.08.28
변수  (0) 2022.08.28

+ Recent posts