[JAVA] 은닉성

집 가고 싶다.·2023년 12월 27일

JAVA

목록 보기
20/33
post-thumbnail

1. 은닉성

  • 멤버변수나 메서드가 객체에 노출되지 않도록 설정하는 기법
  • 객체를 사용하는 측의 실수로 인한 기능의 오작동을 방지하기 위해, 클래스의 일부를 숨기는 처리를 말한다.

2. 적용 방법

  • 변수나 메서드 앞에 "접근 한정자"를 지정.
  • public: 모든 곳에서 접근 가능. 일반적으로 메서드 앞에 명시.
  • protected: 현재 클래스 내의 다른 자원, 같은 패키지 안의 클래스와 하위 클래스에서 접근 가능. (잘 사용하지 않음)
  • default: 현재 클래스 내의 다른 자원, 동일 패키지 내의 다른 클래스에서 접근 가능. (잘 사용하지 않음)
  • private: 클래스 내부에서만 사용 가능하고, 객체를 통한 접근 불가. 일반적으로 멤버 변수 앞에 명시.

3. Getter, Setter

멤버변수 은닉된 경우, 데이터 접근을 위한 간접적인 방법이 필요.
Getter: 은닉된 멤버변수의 값을 반환하는 메서드.

private int age;
private String name;
public int getAge(){
	return this.age;
}
public String getName(){
	return this.name;
}

Setter: 파라미터로 전달된 값을 멤버변수에 할당하는 메서드.

private int age;
public void setAge(int age){
	if(age >= 0){
		this.age = age;
	} else {
	this.age = 0;
	}
}

3-1. Getter와 Setter는 왜 써야할까

캡슐화

  • 유사한 기능이나 변수를 한 집합으로 하여 더 관리하기 쉽게하고 코드를 명확히 함
  • 외부에서 멤버를 엑세스하는 방법을 지정할 수 있도록, 직접 접근을 막거나 접근전 부가적인 처리를 요구함
  • 정보를 외부에 은닉하여 외부에서는 해당 집합의 세부 내용에 집중하지 않도록 함

4. 클래스에 접근 한정자 지정

  • public: 객체 생성 가능. 서로 다른 소스코드에 정의된 클래스끼리도 객체 생성 가능.
  • private: 클래스에 적용할 수 없음.
  • protected: 클래스에 적용할 수 없음.
  • default: 동일한 소스코드에 정의된 클래스끼리만 객체로 생성 가능.

5. 클래스의 분리

  • 기능 단위로 소스코드 분리해 유지보수 효율적.
  • 클래스끼리 객체 생성을 위해 public 접근 한정자 명시.

6. 자바빈즈(Java Beans)

  • 자바 언어에서 사용하는 복합적 데이터 표현의 최소 단위.
  • 재사용 가능한 컴포넌트 생성 가능.
  • 클래스는 생성자를 가져야 하고, 속성은 get, set 메서드를 사용해 접근 가능해야 함.

예시

// 1. 은닉성
class Car {
    private String model; // 은닉된 멤버변수

    public Car(String model) {
        this.model = model;
    }

    // 3. Getter, Setter
    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }
}

public class Main {
    public static void main(String[] args) {
        // 4. 클래스에 접근 한정자를 지정한 경우
        Car myCar = new Car("Sedan"); // public 클래스는 객체 생성 가능

        // 은닉된 멤버변수에 간접적으로 접근
        System.out.println("My car model: " + myCar.getModel());

        // 5. 클래스의 분리
        Engine myEngine = new Engine(); // Engine 클래스는 다른 클래스에서 객체 생성 가능
    }
}

// 5. 클래스의 분리
class Engine {
    // 엔진 관련 기능 구현
}
profile
틀린거 있으면 알려주세요.

0개의 댓글