FIF's 코딩팩토리

자바 기초 NCS교육과정(16)-접근제어자 본문

Back-End/국비 NCS교과과정

자바 기초 NCS교육과정(16)-접근제어자

FIF 2019. 7. 30. 10:47
반응형
접근제어자란?

 

멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다.

 

- 접근제어자를 사용할 수 있는 곳 : 클래스, 멤버변수, 메서드, 생성자

 

종류/범위

1. privte : 같은 클래스 내에서만 접근 가능

 

2. dafault : 같은 패키지 내에서만 접근 가능, 접근제어자를 지정하지 않았더라면 자동으로 default로 지정된다.

 

3. protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.

 

4. public : 접근 제한이 전혀 없다.

 

 

접근 제어자는 대상에 따라 사용가능할 수 있는것이 다르다.

 

Java090_singleton.java

//번호 순서대로 로직이 실행 된다.
class MemberDAO{
	
	//2 객체생성
	private static MemberDAO dao=new MemberDAO();
	
	//1 생성자의 접근제어자를 private으로 선언한다.
	private MemberDAO() {
		
	}
	
	//3 객체를 리턴해줄 메소드 정의
	public static MemberDAO getInstance() {
		return dao;
	}
	
	public void display() {
		System.out.println("display");
	}
}

public class Java090_singleton {

	public static void main(String[] args) {
		MemberDAO dp=MemberDAO.getInstance();
		dp.display();

		
	}

}

출력결과

 

 

 접근제어자(access modifier)사용목적

  1 외부의 접근을 제한하기 위해서이다.

 

  2 외부로 부터 자원을 감추기 위해서이다.(정보은닉, 캡슐화)
 캡슐화(encapsulation) 또는 정보은닉(information hiding)으로 불리는 소프트웨어 설계 기본 원리중의 하나인 이 개념은
 묘듈은 자신의 외부 API를 통해서만 다른 묘듈과 상호작용(통신, 메세지교환) 하며 자신의 내부 묘듈은 감추고,
 다른 묘듈의 내부 작업에도 직접적으로 개입하지 않도록 설계하는 것이다.

  은폐화(encapsulation) 정의방법
  1 멤버변수의 접근제어자는 private으로 선언한다.


  2 외부로부터 멤버변수에 값을 할당하기 위한 setter메소드를 정의한다.


  3 setter메소드 정의방법
    -접근제어자는 public으로 지정한다.
    -리턴 타입은 void으로 지정한다.
    -메소드명은 set으로 시작하고 멤버변수의 첫글자만 대문자로 지정하고 나머지는 같게 한다.
    private int num;
    public void setNum(int num){
     this.num=num;
    }


  4 외부에 멤버변수의 값을 제공할때는 getter메소드를 정의한다.


  5 getter메소드 정의방법
    -접근제어자는 public으로 지정한다.
    -리턴타입은 멤버변수의 데이터 타입하고 같게한다.
    -메소드명은 get으로 시작하고 멤버변수의 첫글자만 대문자로 지정하고 나머지는 같게한다.
     public int getNum(){
       return num;
     }  
 

 

Java091_encapsulation.java

class Time{
	private int hour;
	private int minute;
	private int second;
	
	public Time() {
		
	}

	public int getHour() {
		return hour;
	}

	public void setHour(int hour) {
		this.hour = hour;
	}

	public int getMinute() {
		return minute;
	}

	public void setMinute(int minute) {
		this.minute = minute;
	}

	public int getSecond() {
		return second;
	}

	public void setSecond(int second) {
		this.second = second;
	}
}

public class Java091_encapsulation {

	public static void main(String[] args) {
		Time time=new Time();
		time.setHour(14);
		time.setMinute(49);
		time.setSecond(30);
		System.out.printf("%d:%d:%d\n",time.getHour(),time.getMinute(),time.getSecond());	
	}

}

 

지정한 숫자가 나온다.

 

반응형
Comments