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