비전공자의 개발과 친해지기/클래스와 객체

[JAVA : 클래스와 객체]4. 접근제한자

justdoIT0730 2022. 4. 18. 21:32
728x90
728x90

- 접근제한자

  접근제한자로 OOP의 4가지 특징 중 캡슐화를 가장 잘 표현할 수 있습니다. 접근제한자는 멤버 변수 및 메서드를 선언할 때 사용하며, 접근제한자를 통해 멤버 변수 및 메소드를 공개하는데 있어서 제약을 걸 수 있습니다. 

 

 

접근제한자의 종류와 각각의 자료 제한 범위
 
 
 

  접근제한자를 통해 데이터 접근을 제한한 예시입니다.

import java.io.*;
class Main {
	public static void main(String[] args) {
		ClassExample ce;
		ce = new ClassExample();
		
		ce.mDouble = 10;	// 오류 발생
		ce.CE_Print_mDouble();
		
		ce.CE_Set_mDouble(30);
		ce.CE_Print_mDouble();
	}
}

class ClassExample {
	
	private double mDouble;
	
	public void CE_Print_mDouble() {
		System.out.println(mDouble);
	}
	
	public void CE_Set_mDouble(double dInput) {
		mDouble = dInput;
	}
	
}

 

 

  앞에서 사용했던 예제를 활용하여 멤버 변수 및 메서드에 접근제한자를 사용하였습니다. 멤버 변수인 mDouble에 private를 사용했으며, 각 메서드들에는 public을 사용해주었습니다.

 

 

  위 예제는 정상 동작하지 않습니다. 바로 7번째 줄에서 오류가 나기 때문입니다., 이는 바로 private 형인 mDouble을 ClassExample 객체 외부에서 접근했기 때문입니다.

 

  private 접근제한자는 객체 자기 자신 안에서만 사용할 수 있도록 제한하는 구문이므로 7번째 줄처럼 객체 바깥에서 멤버에 직접 접근을 시도하면 오류가 발생하게 됩니다. 따라서 위 예제처럼 private 형의 접근제한자를 가진 멤버에 접근하고 싶다면 public으로 선언된 멤버를 활용해야 합니다.

 

 

 

import java.io.*;
class Main {
	public static void main(String[] args) {
		ClassExample ce;
		ce = new ClassExample();
		
		ce.CE_Set_mDouble(30);
		ce.CE_Print_mDouble();
	}
}

class ClassExample {
	
	private double mDouble;
	
	public void CE_Print_mDouble() {
		System.out.println(mDouble);
	}
	
	public void CE_Set_mDouble(double dInput) {
		mDouble = dInput;
	}
	
}

 

예제에서 메서드들은 public 형으로 선언되었으므로 외부에서 사용할 수 있습니다.

 

  7, 8번째 줄을 보면 메소드를 사용했지만 코드 동작에 있어서 문제가 발생하지 않습니다. 또한 사용한 메소드들이 ClassExample 객체의 메소드이므로 메소드 내부에서 ClassExample의 mDouble 변수에 접근하더라도 오류 없이 변수 값을 출력하는 것을 볼 수 있습니다.

 

 

  즉, private 및 public을 통해 외부에서 접근 가능한 멤버를 설정해 줄 수 있고, 이는 프로그래머로 하여금 정보 은닉의 효과 및 중요 정보의 보안성을 높여주는 방법으로 사용됩니다.

728x90
728x90