본문 바로가기
Programming/Java

[JAVA] 접근 제한자

by 공부합시다홍아 2023. 11. 13.
 

[JAVA] 패키지와 상속

[JAVA] 객체와 클래스 [JAVA] 스택(Stack)과 큐(Queue) [JAVA] 매서드 [JAVA] 2차원 배열 [JAVA] 배열을 이용한 문제풀이 [JAVA] 정렬과 복사 [JAVA] 배열 연습 [JAVA] 소수(Prime Number) 구하기 반복문을 이용한 별만들

hong-study.tistory.com


접근제한자 ( Access Modifier )
  • 접근 제한자는 클래스와 멤버변수, 메서드, 생성자의 접근을 제어할 수 있는 제한자이다.
  • 라이브러리 클래스를 설계할 때 외부클래스에서 접근할 수 있는 멤버와 접근 할 수 없는 멤보로 구분한다.
    • 변수, 생성자, 메서드를 설계하는 것이 바람직
  • 외부에서 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나, 객체의 특정 데이터를 보호하기 위해
  • 해당 멤버변수에 접근하지 못하도록 막는 것이 접근 제한자의 역할이다. 
  • 클래스에는 접근제한자를 public 과 default만 붙일 수 있다.

접근제한자의 종류
  1. public : 같은 클래스, 같은 패키지, 다른 패키지를 막론하고 모두 접근이 가능
  2. protected : 같은 클래스, 같은 패키지는 접근이 가능하지만 다른 패키지에 속해있는 클래스인 경우 상속관계가 없으면 접근이 불가능하다.
  3. default : 같은 클래스, 같은 패키지에서만 접근이 가능하며 패키지가 다를 경우 접근이 불가능하다.
  4. private : 같은 클래스 내부가 아니면 접근이 불가능하다.

정보은닉 - 캡슐화 ( Encapsulation )
  • 은닉은 사용자에게 상세한 내부 구현을 숨기고 필요한 부분만 보이게 하는 것이다.
  • 은닉을 사용하기 위해서는 클래스의 멤버변수의 접근제한자를 private으로 설정한다.
  • 은닉된 멤버변수에 접근하기 위해서는 공개된(public) 메서드를 통해서 접근할 수 있다.
  • 변수 의 값을 변경시키는데 사용되는 메서드는 setter메서드
  • 변수의 값을 얻어오는데 사용 하는 메서드를 getter메서드
  • 공개 메서드를 이용하여 데이터를 변경시킬 경우 메서드 내에 데이터 유효성을 검증할 수 있는 루틴을 넣을 수 있다.
  • 접근 권한을 체크할 수 있는 로직을 포함시키면 인가되지 않은 사용자 에게 중요한 데이터나 로직을 숨길 수 있다.
  • 멤버변수만 private 제한자를 가지는 것은 아닙니다. 외부에 공개하고 싶지 않은 메서드들도 private으로 선언 가능

user 클래스 ( 은닉 (getter,setter) )

public class User {
	
	private String name;
	private int rrn;
	private int age;
	
	public User() {
		
	}
	
	public User(String n, int r, int a) {
		this.name = n;
		this.rrn = r;
		this.age = a;
	}


	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getRrn() {
		return rrn;
	}

	public void setRrn(int rrn) {
		this.rrn = rrn;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
}

< Main Class >

import java.util.Arrays;
import java.util.Scanner;

public class MainClass {

	public static void main(String[] args) {
		
		User u = new User("홍길동", 123123, 20);
		String name = u.getName();
		int rrn = u.getRrn();
		int age = u.getAge();
		
		System.out.println(name + " " + rrn + " " + age);


		User[] user = new User[2];
		User u2 = new User("김길동", 456456, 30);
		user[0] = u;
		user[1] = u2;
		
		for (User i : user){
			System.out.println(i.getName() + " " +  i.getAge() + " " + i.getRrn());
		}
		
		
		Scanner sc = new Scanner(System.in);
		User[] users = new User[2];
		int i = 0;
		
		while(i<users.length) {
			
			String n = sc.next();
			int r = sc.nextInt();
			int a = sc.nextInt();
			
			User us = new User(n, r, a);
			users[i] = us;
			i++;
			
		}
		
		for(User j : users) {
			System.out.println(j.getName() + " " + j.getAge() + " " + j.getRrn());
		}
		

	}

}

예제

< Keyboard.class >

public class KeyBoard {

	public void info() {
		System.out.println("----키보드 정보----");
		System.out.println("from 삼성");
	}
}

< Monitor.Class >

public class Monitor {

	public void info() {
		System.out.println("----모니터 정보----");
		System.out.println("from LG");
	}
}

< Mouse.Class >

public class Mouse {

	public void info() {
		System.out.println("----마우스 정보----");
		System.out.println("from 미키마우스");
	}
}

< Compiter.Class >

public class Computer {
	//1. 키보드, 마우스, 모니터 클래스를 저장하는 변수를 선언
	public KeyBoard keyboard;
	public Monitor monitor;
	public Mouse mouse;
	//2.기본생성자를 생성하고, 변수를 클래스로 초기화
	public Computer() {
		this.keyboard = new KeyBoard();
		this.monitor = new Monitor();
		this.mouse = new Mouse();
	}
	

	//3.KeyBoard, Mouse, Monitor를 전달받는 생성자를 생성.
	
	public Computer(KeyBoard k, Monitor m, Mouse m1) {
		this.keyboard = k;
		this.monitor = m;
		this.mouse = m1;
		
	}
	
	
	//4.키보드, 모니터, 마우스 정보를 출력하는 computerInfo() 메서드를 생성
	public void computerInfo() {
		keyboard.info();
		monitor.info();
		mouse.info();
	}
	//5.키보드, 모니터, 마우스에 대한 getter/setter 생성	

	public KeyBoard getKeyboard() {
		keyboard.info();
		return keyboard;
	}

	public void setKeyboard(KeyBoard k) {
		this.keyboard = k;
	}

	public Monitor getMonitor() {
		monitor.info();
		return monitor;
	}

	public void setMonitor(Monitor m) {
		this.monitor = m;
	}

	public Mouse getMouse() {
		mouse.info();
		return mouse;
	}

	public void setMouse(Mouse m1) {
		this.mouse = m1;
	}
	
}

< Main.Class >

public class MainClass {

	public static void main(String[] args) {
		
		Computer cm = new Computer();
		cm.computerInfo();
		System.out.println();
		
		cm.getMonitor();
		
	}

}
728x90

'Programming > Java' 카테고리의 다른 글

[JAVA] 정적 제한자 Static  (0) 2023.11.30
[JAVA] 다형성  (1) 2023.11.14
[JAVA] 패키지와 상속  (0) 2023.11.10
[JAVA] 객체와 클래스  (0) 2023.11.08
[JAVA] 스택(Stack)과 큐(Queue)  (0) 2023.11.07