[Java] 정보은닉(Information Hiding)

hyun-jin·2022년 9월 7일
0

Java

목록 보기
11/14

정보은닉

  • 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이다.
  • 객체를 사용하는 측의 실수로 인한 기능의 오작동을 방지하기 위해, 클래스의 일부를 숨기는 처리를 말한다.

1.적용 방법

  • 변수의 이름이나 메소드 이름 앞에 접근 제어자를 지정한다.

1-1. public 접근 제어자

  • 모든 곳에서 접근 가능하다.
  • 일반적으로 모든 메소드 앞에 명시한다.
    ✔ 다른 클래스에 객체 생성이 가능고 서로 다른 소스코드에 정의된 클래스끼리도 객체 생성이 가능하다.
    public class Everywhere{
    	public String can = "누구든지 허용";
        public String getCan(){
        	return this.can;
        }
    }

1-2. private 접근 제어자

  • 클래스 안에서 사용가능하고, 객체를 통해 접근할 수 없다.
  • 일반적으로 모든 멤버변수 앞에 명시한다.
    ✔ 다른 클래스에 적용할 수 없다.
    public class SameClass{
    	private String same = "같은 클래스만 허용";
        private String getSame(){
        	return this.same;
        }
    }

1-3. protected 접근 제어자

  • 현재 클래스 내의 다른 자원이나, 같은 패키지 안에 존재하는 클래스와 하위 클래스에서 접근 가능하다.
  • 단, 잘 사용하지 않는다.
    ✔ 다른 클래스에 적용할 수 없다.

1-4. default 접근 제어자

  • 접근 한정자를 명시하지 않은 경우, 현재 클래스 내의 다른 자원이나 동일 패키지 내의 다른 클래스에서 접근 가능하다.
  • 단, 잘 사용하지 않는다.
    ✔ 동일한 소스코드에 정의된 클래스끼리만 객체로 생성 가능하다.

2. getter(게터), setter(세터)

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

2-1. getter

  • 은닉된 멤버 변수의 값을 리턴하기 위한 메소드이다.

2-2. setter

  • 파라미터로 전달된 값을 멤버변수에 복사하기 위한 메소드이다.

2-3. 메소드 작성 방법

멤버변수 이름gettersetter
String userNameString getuserNamevoid setUserName(String parameter)
int userAgeint getuserAgevoid setUserAge(int parameter)

-> "get","set"접두사 뒤에 변수이름을 첫 글자가 대문자인 형태로 명시된다.
-> getter는 연결된 멤버변수의 데이터 타입을 리턴형으로 명시된다.
-> setter는 연결된 멤버변수의 데이터 타입을 파라미터 형으로 명시된다.

✔ 단축키

  • Shift + Alt + s -> r -> 만들고 싶으신 Getter Setter에 체크 -> OK 클릭
class Student{
	// 은닉된 멤버변수 -> 현재 블록 안에서만 접근 가능함
	private String name;
	private int age;
// name getter
	public String getName() {
		return this.name;
	}
// name setter
	public void setName(String name) {
		this.name = name;
	}
// age getter
	public int getAge() {
		return this.age;
	}
// age setter
	public void setAge(int age) {
		this.age = age;
	}

3. 클래스 분리

  • 하나의 소스코드에서 프로그램의 모든 기능을 구현하게 되면 유지보수에 비효율적 이므로, 기능단위로 소스코드를 분리해야 한다.
  • 소스코드가 분리된 클래스끼리는 public이 명시되어야만 서로 객체 생성이 가능하다.
  • 일반적으로 클래스 정의에는 public 접근 한정자만 사용한다.
  • 하나의 소스코드에는 하나의 public 클래스만 존재한 수 있다.

4. 자바빈즈(Java Beans)

  • 자바 언어에서 사용하는 복합적 데이터 표현의 최소 단위로서, 재사용 가능한 컴포넌트(구성요소)를 생성할 수 있다.
  • 자바 빈즈 클래스로서 작동하기 위해서, 객체 클래스는 명명법, 생성법 그리고 행동에 관련된 일련의 관례를 따라야만 한다. 이러한 관례는 개발도구에서 자바 빈즈와의 열결을 통해 클래스의 사용과 재사용 그리고 클래스의 재배치를 가능하게 한다.
  • 지켜야할 관례
    -> 클래스는 생성자를 가지고 있어야한다.
    -> 클래스의 속성들으 get, set 메서드를 통해 접근할 수 있어야 한다.

0개의 댓글