본문 바로가기

컴퓨터언어/JAVA(자바)

[JAVA강좌] 23강 접근제어자와 정보은닉

728x90
반응형

 

 

 

 

 

 

 

 

 

- 여태까지 클래스를 만들고, 멤버변수, 메서드, 생성자를 만들 때 public 키워드를 많이 사용했습니다.

- 설명 없이 그냥 같이 적었는데, 이게 접근제어자입니다.

- 이번 강좌에서는 접근제어자와 그것을 이용한 정보은닉에 대해 배워보도록 하겠습니다. 

 

 

 

 

 

 

 

 

 

1. 접근제어자란?


- 객체지향 프로그램에서는 예약어를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있습니다.

- 이러한 예약어를 접근제어자라고 합니다.

- 정리하면 클래스의 멤버변수, 메서드, 생성자에 대한 접근을 지정하는 예약어라고 보면 됩니다.

 

 

 

1) 접근제어자 종류

접근제어자 설명
public 외부 클래스 어디서나 접근 가능
protected 같은 패키지 + 자신 클래스 + 자손클래스
생략 default이며, 같은 패키지 내부에서만 접근 가능
private 자신 클래스에서만 접근 가능

 

- 현재는 아직 상속개념을 배우지 않았기 때문에 protected에서 자손 클래스 개념은 추후에 보겠습니다. 

 

- 패키지를 ch15_access_modifier로 제작을 합니다.

- 그리고 또 저 내부에 패키지를 만들겠습니다. 

- 패키지 잡고 [Ctrl]+[N] 눌러 줍니다.

 

- 그리고 나서 패키지명 뒤에 .student라고 추가해 줍니다.

 

- 그럼 이런 형태로 들어가기 때문에 내부에 있는 패키지인지 보기가 어렵습니다.

 

- 이클립스 같은 경우 [...]이 아래로 되어 있는 아이콘을 누릅니다.

- [package presentation]을 [Hierarchical]로 해줍니다.

- 그러고 나서 클래스 파일들을 생성하면 내부 폴더 형태로 보일 겁니다. 

 

- Student.java는 main () 함수 체크하지 말고 생성합니다.

- 나머지는 main () 함수 체크해서 생성합니다.

- 그러면 저렇게 폴더 형태인 트리 구조로 보일 겁니다. 

- 그럼 Student가 학생클래스를 만드는 파일이라고 보고, 클래스에서 만든 멤버변수들을 다른 파일들이 가져다 써보겠습니다.

 

 

## Student.java

package ch15_access_modifier.student;

public class Student {
	//접근제어자별 멤버 변수 선언
	public String name;
	private int grade;
	protected int num;
	int id; //default
	
	//기본 생성자 처리 - 원래 안적어도 자동 생성
	public Student() {}
}

- 멤버변수는 접근제어자별로 선언해 봤습니다.

- 생성자는 public이기 때문에 어떤 외부 파일들에서도 인스턴스를 생성할 수 있습니다. 

 

 

## 같은 패키지의 StudentMain.java

package ch15_access_modifier.student;

public class StudentMain {

	public static void main(String[] args) {
		//인스턴스 생성
		Student st01 = new Student();

		//멤버변수 접근해보기
		st01.name = "홍길동"; //public이니까 가능
		//st01.grade = 1; //private이니까 어떤 외부파일이든 불가능
		st01.num = 1; //protected이니까 같은 패키지여서 가능
		st01.id = 1; //default니까 같은 패키지여서 가능
	}
}

 

- st01.grade만 에러가 발생되기 때문에 주석을 처리했습니다. 

 

- 주석을 지운 상태라면 이렇게 에러가 발생되는 것을 확인할 수 있습니다. 

 

 

## 다른 패키지의 OutMain.java

package ch15_access_modifier;

import ch15_access_modifier.student.Student;

public class OutMain {

	public static void main(String[] args) {
		//인스턴스 생성
		Student st02 = new Student();

		//멤버변수 접근해보기
		st02.name = "홍길동"; //public이니까 가능
		//st02.grade = 1; //private이니까 어떤 외부파일이든 불가능
		//st02.num = 1; //protected이니까 다른 패키지여서 불가능
		//st02.id = 1; //default니까 다른 패키지여서 불가능
	}
}

 

- 주석을 지운 상태라면 3줄이나 에러가 발생됩니다.

- 다른 패키지므로 public만 가능한 것을 확인할 수 있습니다.

- 이렇게 같은 패키지인지, 다른 패키지인지에 따라 멤버변수나 메서드에 접근할 수 있는 제어를 해줍니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

2. 정보은닉이란?


- 정보은닉이란 클래스 내부에서 사용할 변수나 메서드를 private으로 선언해서 외부에서 접근하지 못하도록 막는 것을 말합니다. 

- 정보은닉은 객체 지향 프로그래밍의 특징 중에 하나이며, 자바에서는 접근 제어자를 사용하여 정보 은닉을 구현합니다.

- 모든 변수나 메서드를 private로 선언해야 하는 것은 아니지만, 필요한 경우 private으로 선언하여 오류를 막을 수 있습니다. 

 

 

 

1) 자바에서 일반적으로 사용하는 정보은닉

- 아래 작성하는 것은 보통 경우로 정답은 아님을 밝힙니다. 

  1. 일반적으로 멤버 변수는 private으로 선언
  2. 일반적으로 메서드는 public으로 선언
  3. 일반적으로 생성자는 public. 싱글톤의 경우 private

- 싱글톤은 추후 강좌에서 static 예약어를 더 자세히 보면서 설명하겠습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형