java

22. 캡슐화

dalc3154 2025. 2. 25. 17:10

캡슐화(Encapsulation)

OOP (Object-Oriented Programming - 객체지향적프로그래밍)에서 데이터와 해당 데이터를 처리하는 메소드(함수)를 하나로 묶는 것

객체 내부의 구현을 숨기고, 외부에서는 제공된 메소드를 통해서만 접근하도록 설정한다

데이터를 보호하고, 유지보수성을 향상하며, 사용자 편의성을 증대시킨다

 

getter와 setter 메소드

캡슐화 된 데이터에 안전하게 접근하고 수정할 수 있도록 하는 기능

데이터의 무결성을 유지하고 정보를 은닉함

 

private 사용하기데이터 보호/ 유지보수성 향상을 위해 데이터 필드(속성)은 private로 선언한다데이터에 접근하거나 수정할때는 getter & setter를 사용한다

 

getter: 객체의 특정 필드 값을 가져오는(읽는) 메소드

get필드명();

 

setter: 객체의 특정 필드 값을 설정(변경)하는 메소드

set<필드명>();

 

예시)

// 학생 정보 관리 클래스
class Student{
	private String name;
	private int residentNumber;// 주민등록번호
	private int age;
	private int score;
	
	public void setResidentNumber(int number) {
		this.residentNumber = number;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public String getAge() {
		// 단순한 데이터 반환 뿐만 아니라, 데이터 가공 역할을 담당하기도 함
		if(age > 19) {
			return "성인입니다";
		} else {
			return "미성년자입니다";
		}
		
	}
	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 B_Encapsulation {
	public static void main(String[] args) {
		Student student = new Student();
//		student.name = "이승아";
		
		student.setName("이승아");
		student.setAge(29);
		student.setAge(-29);// 유효하지 않은 나이입니다
		student.setResidentNumber(1234567);
		student.setScore(101);// 유효하지 않은 점수입니다
		student.setScore(100);
		
		student.setResidentNumber(9999999);
		// 데이터의 불변성이 지켜지지 않음
		// >> final 키워드
	}
}

 

##_(언더바)와 -(하이픈)의 구별

언더바는 가독성을 위한 단어의 구분으로 1개의 단어로 취급한다

하이픈은 각 단어의 구분으로 2개의 단어로 취급한다