본문 바로가기

JAVA

은닉성 자바빈즈

은닉성

#01. 은닉성이란?

멤버변수나 메서드가 객체에 노출되지 않도록 설정하는 기법

객체를 사용하는 측의 실수로 인한 기능의 오작동을 방지하기 위해, 클래스의 일부를 숨기는 처리를 말한다.

#02. 적용방법

변수의 이름이나 메서드 이름 앞에 접근 한정자를 지정한다.

1) 멤버변수와 메서드에 대한 적용

예약어 설명
public 이 키워드가 적용된 멤버변수나 메서드는 모든 곳에서 접근 가능하다.
일반적으로 모든 메서드앞에 명시한다.
private 클래스 안에서만 사용가능하고, 객체를 통해 접근할 수 없다.
일반적으로 모든 멤버변수앞에 명시한다.
protected 현재 클래스 내의 다른 자원이나, 같은 패키지 안에 존재하는 클래스와 하위 클래스에서 접근 가능하다. 잘 사용하지 않는다.
default 접근 한정자를 명시하지 않은 경우.
현재 클래스 내의 다른 자원이나 동일패키지 내의 다른 클래스에서 접근 가능하다.
잘 사용하지 않는다.

SimplePrivate.java

PrivateTest{
    public int a;
    private int b;
}

public class SimplePrivate {
    public static void main(String[] args) {
        PrivateTest pTest = new PreivateTest();
        pTest.a = 200;    // ---> public이므로 문제없음
        ptest.b = 200;    // ---> private이므로 객체를 통해서는 접근할 수 없다.(에러)
    }
}
출력결과
SimplePrivate.java:10: error: b has private access in PrivateTest
        pTest.b = 200;    // ---> private이므로 객체를 통해서는 접근할 수 없다.(에러)
         ^
1 error

#03.getter, setter

멤버변수가 은닉된 형태로 선언된 경우 프로그램의 가장 근본적인 목적인 데이터에 접근하는 방법이 사라지므로 메서드를 통하여 간접적으로 접근하는 방법이 마련되어야 한다.

getter, stter는 은닉된 멤버변수에 간접적으로 접근하기 위하여 정의된 메서드들을 의미하는 용어이다.

  • getter 은닉된 멤버변수릐 값으 리턴하기 위한 메서드
  • setter 파라미터로 전달된 값을 멤버변수에 복사하기 위한 메서드

메서드 작성 규칙

  • "get", "set"접두사 뒤에 변수이름을 첫 글자가 대문자인 형태로 명시
  • getter는 연결된 멤버변수의 데이터 타입을 리턴형으로 명시
  • setter는 연결된 멤버변수의 데이터 타입을 파라미터 형으로 명시
ex) 멤버변수 이름이 userName인 경우
public void setUserName(String userName) {
    this.userName = userName;
}

public String getUserName() {
    return this.userName;
}

GetSet.java

class Member {
    private String id = "아이디"; 
    private String pass = "비밀번호"; 
    private String name = "이름";
    private String born = "생년월일";
    private String sung = "성별";
    private String email = "이메일";
    private String phone = "전화번호";

public void setId(String id){
    this.id = id;
}
public void setPass(String pass){
    this.pass = pass;
}
public void setName(String name){
    this.name = name;
}public void setBorn(String born){
    this.born = born;
}
public void setSung(String sung){
    this.sung = sung;
}
public void setEmail(String email){
    this.email = email;
}
public void setPhone(String phone){
    this.phone = phone;
}

public String getId() {
    return this.id;
}
public String getPass() {
    return this.pass;
}
public String getName() {
    return this.name;
}
public String getBorn() {
    return this.born;
}
public String getSung() {
    return this.sung;
}
public String getEmail() {
    return this.email;
}
public String getPhone() {
    return this.phone;
}
}


public class GetSet{
    public static void main(String[] args){
        Member m1 = new Member();
        Member m2 = new Member();
        m1.setId("ID101");
        m1.getId();
        m1.setPass("asdasd");
        m1.getPass();
        m1.setName("김가상");
        m1.getName();
        m1.setBorn("1991 12 12");
        m1.getBorn();
        m1.setSung("남");
        m1.getSung();
        m1.setEmail("gs@naver.com");
        m1.getEmail();
        m1.setPhone("010-1234-1234");


        m2.setId("ndndndnc");
        m2.getId();
        m2.setPass("123123");
        m2.getPass();
        m2.setName("가상킴");
        m2.getName();
        m2.setBorn("1990 08 08");
        m2.getBorn();
        m2.setSung("남");
        m2.getSung();
        m2.setEmail("sk@naver.com");
        m2.getEmail();
        m2.setPhone("010-1234-1234");

        /*m1.id =  "sjdn";
        m1.pass = "asdasd";
        m1.name = "가상";
        m1.bron = "1990 11 11";
        m1.sung = "남";
        m1.email = "gs@naver.com";
        m1. phone = "010-0100-1010"; */

        System.out.println(m1.getId());
        System.out.println(m1.getPass());
        System.out.println(m1.getName());
        System.out.println(m1.getBorn());
        System.out.println(m1.getSung());
        System.out.println(m1.getEmail());
        System.out.println(m1.getPhone());

        System.out.println("--------------");

        System.out.println(m2.getId());
        System.out.println(m2.getPass());
        System.out.println(m2.getName());
        System.out.println(m2.getBorn());
        System.out.println(m2.getSung());
        System.out.println(m2.getEmail());
        System.out.println(m2.getPhone());
    }
}

Java Beans

  • 자바 언어에서 사용하는 복합적 데이터 표현의 최소 단위로서 재사용 가능한 컴포넌트(구성요소)를 생성할 수 있다.

  • 자바빈즈 클래스로서 작동하기 위해서 객체 클래스는 명명법, 생성법 그리고 행동에 관현된 일련의 관례를 따라야만 한다.
    이러한 관례는 (빌더 형식의) 개발 도구에서 자바빈즈와의 연결을 통해 클래스의 사용과 재사용 그리고 클래스의 재배치를 가능하게 한다.

  • 지켜야 할 관례

    • 클래스는 생성자를 가지고 있어야 한다.
    • 클래스의 속성들은 get,set혹은 표준 명명법을 따르는 메서드들을 사용해 접근할 수 있어야 한다.

'JAVA' 카테고리의 다른 글

예외처리  (0) 2020.05.31
클래스와 객체  (0) 2020.05.25
메서드  (0) 2020.05.20
2차배열  (0) 2020.05.20
배열  (0) 2020.05.20