오늘은 머리가 상대적으로 덜? 깨지는 것을 알아보려고 한다.
그것은 바로!
오늘 이야기의 주인공!
생.성.자에 관해 이야기해 보고자 한다.
짝-짝-짝
자 그럼 본론으로 들어가자
생성자란? 클래스에서 객체를 생성할 때 자동으로 호출되는 메서드이다.
이 생성자의 역할은 객체의 초기 값을 초기화(설정)하는 데 사용이 된다.
따란! 잠.깐.만↑
여기서 잠깐 초기화란?
초기화란 변수를 선언 후 그 변수에 처음으로 값을 할당(입력)하는 과정을 뜻합니다.
다시~ 예시 코드
class Car {
String color; // 자동차 색상
String model; // 자동차 모델
// 생성자
public Car(String color, String model) {
this.color = color; // 색상 초기화
this.model = model; // 모델 초기화
}
// 자동차 정보 출력 메서드
public void displayInfo() {
System.out.println("모델: " + model + ", 색상: " + color);
}
}
public class Main {
public static void main(String[] args) {
// 자동차 객체(인스턴스) 생성
Car myCar = new Car("빨강", "뽀오오오오르쉥");
myCar.displayInfo(); // 모델: 뽀오오오오르쉥, 색상: 빨강
}
}
// 객체 생성시 new 키워드를 통해 호출되고 초기화할 데이터를 인자(입력값/매개변수)로 받을 수 있다.
쉽게 말해 저 생성자라는 통로(구멍)를 통해서 값을 넣어준다고 생각하면 된다.
어허.... 아직. 이 생성자를 왜? 꼭, 써야 할지 이해가 안 되신다구요?
하하!
그것은 바로 캡슐화와 관련이 있지요 (캡슐화 잘 모른다면 이전 글 객체지향 읽고 오기)
자자 우리 클래스의 두개의 구멍 기본 생성자와 파라미터(매개변수)생성자 예시를 보도록 합시다.
class Car {
private String color; // 자동차의 색상
private String model; // 자동차의 모델
// 기본 생성자
public Car() {
this.color = "흰색"; // 기본 색상 : 우리가 무슨 민족입니까 백의의 민족 아닙니까?
this.model = "기본 모델"; // 기본 모델
}
// 파라미터 생성자
public Car(String color, String model) {
this.color = color; // 색상 초기화
this.model = model; // 모델 초기화
}
// 정보 출력 메서드
public void displayInfo() {
System.out.println("모델: " + model + ", 색상: " + color);
}
}
public class Main {
public static void main(String[] args) {
Car defaultCar = new Car(); // 기본 생성자 사용
defaultCar.displayInfo(); // 출력: 모델: 기본 모델, 색상: 흰색
Car customCar = new Car("빨강", "뽀르르르르쉐"); // 파라미터 생성자 사용
customCar.displayInfo(); // 출력: 모델: 뽀르르르르쉐, 색상: 빨강
}
}
자. 기본 생성자를 사용해서 출력한다면 기본생성자를 통해 초기화 된 변수 값이 출력된다.
반대로,
파라미터 생성자를 사용하면 사용자가 직접 생성자를 통해
변수의 값을 새로 할당해서 초기화 할 수 있게 되는 것이다.
이 때 유효성 검사를 위한 메서드를 만들어(if문 사용)
car class 에서 객체에 초기화 될 데이터에 잘못된 데이터가 들어오지 않도록 할 수 있다.
정리
1. 캡슐화는 데이터와 메서드를 하나로 묶고, 데이터에 대한 접근을 제어하는 개념이다.
2. 유효성 검사는 데이터 보호를 더욱 강화해 객체의 상태를 일관되게 유지하는 데 도움을 준다.
이는 캡슐화의 이점을 극대화 시키는 것이다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
접근 제어 지시자 (0) | 2024.10.11 |
---|---|
자바 메모리 구조 설명(RunTime Data Area) (2) | 2024.10.10 |
클래스(class) (0) | 2024.10.08 |
객체 지향(OOP)의 특징 (0) | 2024.10.04 |
객체 지향 프로그래밍(OOP, Object-Oriented Programming) (2) | 2024.10.04 |