1. 생성자 (Constructor)
정의
- 생성자는 클래스가 객체로 생성될때 호출되는 특별한 메서드
- 클래스의 이름과 동일, 반환타입이 없음(`void`도 명시하지 않음)
역할
- 객체 초기화를 주로 담당
- 기본 생성자와 사용자 정의 생성자가 있다
기본 생성자
- 생성자를 작성하지 않으면 컴파일러가 자동으로 추가한다
- 매개변수가 없고 아무 작업도 하지 않는다
class Person {
String name;
int age;
}
public class Main {
public static void main(String[] args) {
Person p = new Person(); // 기본 생성자가 호출됨
System.out.println(p.name); // null
System.out.println(p.age); // 0
}
}
사용자 정의 생성자
- 객체 생성시 특정 값을 초기화 할 수 있다
class Person {
String name;
int age;
// 사용자 정의 생성자
Person(String name, int age) {
this.name = name; // this는 현재 객체를 가리킴
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person("Alice", 25); // 사용자 정의 생성자 호출
System.out.println(p.name); // Alice
System.out.println(p.age); // 25
}
}
2. 생성자 오버로딩
정의
- 같은 이름의 생성자를 다른 매개변수 리스트로 여러개 정의하는것
- 객체 생성시 입력값에 따라 적합한 생성자가 호출된다
class Person {
String name;
int age;
// 기본 생성자
Person() {
this.name = "Unknown";
this.age = 0;
}
// 매개변수 하나인 생성자 (오버로딩)
Person(String name) {
this.name = name;
this.age = 0;
}
// 매개변수 두 개인 생성자 (오버로딩)
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person(); // 기본 생성자 호출
Person p2 = new Person("Alice"); // 매개변수 하나인 생성자 호출
Person p3 = new Person("Bob", 30); // 매개변수 두 개인 생성자 호출
System.out.println(p1.name + ", " + p1.age); // Unknown, 0
System.out.println(p2.name + ", " + p2.age); // Alice, 0
System.out.println(p3.name + ", " + p3.age); // Bob, 30
}
}
3. Getter, Setter
정의
- Getter : 객체의 필드값을 반환하는 메서드
- Setter : 객체의 필드값을 설정하는 메서드
역할
- 클래스의 멤버 변수를 캡슐화하여 직접 접근을 제한하고 안전하게 값을 가져오거나 설정하도록 함
멤버변수를 `private`로 선언하고, 외부에서 접근할수 있도록 `public` Getter, Setter를 제공
class Person {
private String name; // private 멤버 변수
private int age;
// Getter for name
public String getName() {
return name;
}
// Setter for name
public void setName(String name) {
this.name = name;
}
// Getter for age
public int getAge() {
return age;
}
// Setter for age
public void setAge(int age) {
if (age >= 0) { // 유효성 검사
this.age = age;
} else {
System.out.println("나이는 0 이상이어야 합니다.");
}
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person();
// Setter 사용
p.setName("Alice");
p.setAge(25);
// Getter 사용
System.out.println(p.getName()); // Alice
System.out.println(p.getAge()); // 25
}
}
장점
- 데이터 보호 : 필드에서 직접 접근하지 못하도록 막음
- 유효성 검사 : 값을 설정하기 전에 조건 검사를 할수 있음
- 코드 유짓보수성 증가 : 필드가 변경되어도 Getter/Setter를 통해 안정적으로 접근 가능
요약
- 생성자
- 객체 생성시 호출되며 객체의 초기 상태를 설정
- 기본 생성자와 사용자 정의 생성자, 오버로딩 지원
- 오버로딩
- 같은 이름의 메서드(또는 생성자)를 다양한 매개변수 리스트로 제공하여 유연성을 제공
- Getter와 Setter
- 멤버 변수에 간접적으로 접근하여 데이터를 읽거나 수정
- 캡슐화를 통해 데이터 보호와 유효성 검사를 가능하게 함
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
[Java] 반복문 (0) | 2024.12.01 |
---|---|
[Java] 조건문 (0) | 2024.12.01 |
[Java] 캐스팅 (형 변환) (0) | 2024.12.01 |
[Java] abstract와 interface (0) | 2024.11.30 |
[Java] 접근 제어자 (0) | 2024.11.30 |