Java

[Java] Encapsulation

wwxs 2024. 9. 9. 17:22

Encapsulation (캡슐화)

  • 객체 지향 프로그래밍에서 데이터와 해당 데이터를 처리하는 함수를 하나로 묶는 것을 의미
  • 객체 내부의 구현을 숨기고 외부에서는 제공된 메서드를 통해서만 접근할 수 있게 설정
  • 데이터 보호, 유지보수성 향상, 사용자 편의성 증대

 

getter & setter 메서드

  • getter : 객체의 특정 필드 값을 읽는 메서드
  • setter : 객체의 특정 필드 값을 설정하는 메서드

 

(예제 코드)

더보기
// === 학생 정보를 관리하는 클래스 ===
class Student {
	private String name;
	private int age;
	private int score; // 점수 필드

	// getter & setter 메서드 - 캡슐화 되어 있는 데이터에 접근
	// : 메서드 형식을 get변수명, set변수명으로 지정하는 것을 권장

	public String getName() {
		// private 설정되어 있는 name 변수는 반드시
		// , getName() 메서드를 통해서만 외부에서 접근이 가능
		return name; // this 키워드가 생략
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if (age < 0) {
			System.out.println("유효하지 않은 나이입니다.");
		} else {
			this.age = age;
		}
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		if (score > 0 && score < 100) {
			this.score = score;
		} else {
			System.out.println("유효하지 않은 점수입니다.");
		}
	}
}

public class C_Encapsulation {
	public static void main(String[] args) {
		// 인스턴스 생성
		Student student1 = new Student();
//		student1.name = "홍동현"; - Error

		student1.setName("홍동현");
		student1.setAge(25);
		System.out.println(student1.getName()); // 홍동현
		System.out.println(student1.getAge()); // 25

		student1.setAge(-10); // 유효하지 않은 나이입니다.

		// score 필드를 getter & setter 통해 설정
		// >> 점수값에 대한 유효성 검사 코드를 추가
		// : 0 이상 100 이하
		// 85점 설정 > 출력
		student1.setScore(85);
		System.out.println(student1.getScore()); // 85
	}
}

 

 

(추가 예제 코드)

더보기
package chapter07;

// 접근 범위: 제한 X
public class Example {
	// 클래스의 속성
	
	// 어디서든 접근 가능
	public int publicVar = 1;
	
	// 같은 패키지 O, 다른 패키지 - 해당 클래스를 상속받은 자식 클래스만 접근 가능
	protected int protectedVar = 2;
	
	// 같은 패키지 O, 다른 패키지 X (default)
	int defaultVar = 3;
	
	// 같은 클래스 내에서만 접근 가능
	private int privateVar = 4;
	
	// 클래스의 메서드
	public void ex1() {
		System.out.println(publicVar);
		System.out.println(protectedVar);
		System.out.println(defaultVar);
		System.out.println(privateVar);
	}
	protected void ex2() {
		System.out.println(protectedVar);
		
	}
	void ex3() {
		System.out.println(defaultVar);
		
	}
	private void ex4() {
		System.out.println(privateVar);
		
	}
}

 

package otherPackage;

// import 패키지명.클래스명;
import chapter07.Example;

public class OtherClass {
	public static void main(String[] args) {
		// 외부 패키지 클래스를 사용한 객체 인스턴스화
		Example ex = new Example();
		
		System.out.println(ex.publicVar);	// 1
//		System.out.println(ex.protectedVar);
//		System.out.println(ex.defaultVar);
//		System.out.println(ex.privateVar);
		
		ex.ex1();
//		ex.ex2();
//		ex.ex3();
//		ex.ex4();
	}
}