약 6분
읽기 설정
글자 크기
줄 간격
글꼴
1.3. Constructor와 Encapsulation
객체 생성자 (Constructor)
Java에서 객체를 생성할 때 사용하는 특별한 메소드가 바로 "생성자(constructor)"입니다. 생성자는 클래스의 인스턴스가 생성될 때 호출되어 객체의 초기 상태를 설정하는 데 중요한 역할을 합니다. 객체지향 프로그래밍에서 객체의 상태는 객체를 정의하는 속성을 나타내며, 이러한 속성을 초기화하는 방법이 필요합니다. 그래서 생성자는 필수적입니다.
생성자의 필요성
객체를 생성할 때 그 객체의 속성을 특정 값으로 설정해야 할 경우, 생성자가 필요한 이유가 바로 여기에 있습니다. 예를 들어, 학생 객체를 생성할 때 그 학생의 이름이나 나이를 미리 설정해야 제대로 된 객체가 생성됩니다. 성과 이름과 같은 속성을 갖고 있는 "학생" 클래스를 구상해 보겠습니다.
생성자 예제
public class Student {
private String name;
private int age;
// 생성자
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
위의 예시는 "Student"라는 클래스를 정의합니다. 첫 줄에서 학생의 이름과 나이를 저장할 두 개의 변수를 추가하고, 세 번째 줄에서는 생성자를 정의하여 학생의 이름과 나이를 초기화합니다.
Encapsulation (캡슐화)
캡슐화는 객체지향 프로그래밍의 핵심 개념 중 하나입니다. 이는 객체의 속성(데이터)과 기능(메소드)을 하나로 묶어 데이터의 직접적인 접근을 제한하고, 이를 조작할 수 있는 방법(메소드)을 제공하는 것입니다.
캡슐화의 주된 목적은 데이터의 무결성을 유지하고, 외부에서 객체의 내부 상태를 임의로 변경하는 것을 방지하는 것입니다.
캡슐화 예제
캡슐화를 적용한 "Student" 클래스의 경우, 개인 정보인 이름과 나이를 외부에서 직접 접근할 수 없고 대신 제공하는 메소드를 통해서만 접근할 수 있습니다. 이를 통해 데이터가 잘못 변경되는 것을 방지할 수 있습니다.
// Student.java
public class Student {
private String name;
private int age;
// 생성자
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// 이름 설정 메소드
public void setName(String name) {
this.name = name;
}
// 나이 설정 메소드
public void setAge(int age) {
if(age > 0) { // 유효성 검사
this.age = age;
} else {
System.out.println("나이는 0보다 커야 합니다.");
}
}
}
위의 코드에서는 "setName" 및 "setAge" 메소드를 통해 객체의 속성을 안전하게 수정할 수 있는 방법을 제공합니다. 이처럼 외부에서 직접 객체의 상태를 변경하는 것을 방지하는 것이 캡슐화의 장점입니다.
실습
- "Student" 클래스를 바탕으로 자신의 정보(이름, 나이)를 입력받아 출력하는 프로그램을 작성해 보세요.
- 직접 만든 "setAge" 메소드를 활용하여 나이를 음수로 설정해 보았을 때, 발생하는 현상을 확인해 보세요.
public class Student {
private String name;
private int age;
// 생성자
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.