일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- mariadb 서버 기본값 설정
- 잡다한 노트
- 간단한 CRUD 구현
- 게시판
- 국비 과정
- 팝업 생성
- 국비과정
- 회고
- jsp
- 아날로그 시계만들기
- 생년월일 팝업 생성
- CRUD 게시판
- jQuery
- 간단한 CRUD구현
- crud게시판
- Oracle 유동IP
- 국비지원 후기
- 회고록
- 국비
- 간단한 CRUD 게시판
- Oracle 유동아이피
- 파이널 프로젝트
- 국비 회고
- 웹 크롤러
- 취업 후기
- 국비지원
- CRUD 구현
- 유동아이피를 고정하는 방법
- 데이터를 못 읽어오는 경우
- mariadb 접속오류
- Today
- Total
우당탕탕 개발 블로그 도전기
[Java] 생성자 함수와 'this' 본문
https://narunarus.tistory.com/11
03.20~03.21[Java]
03.20(수) ● Java 생성자 함수 Java에서 생성자 함수(Constructor)는 객체가 생성될 때 자동으로 호출되는 특별한 유형의 메서드이다. 주로 객체를 초기화하는 데 사용함. 객체의 field(변수)에 초기값을
narunarus.tistory.com
생성자 함수란?
Java에서 생성자 함수(Constructor)는 객체가 생성될 때 자동으로 호출되는 특별한 유형의 메서드이다. 주로 객체를 초기화하는 데 사용함. 객체의 field(변수)에 초기값을 할당하는 작업을 수행한다. 생성자는 기본적으로 클래스의 이름과 동일한 이름을 가지며, 리턴 타입을 지정하지 않음.
overroding이 가능하며, 같은 이름의 생성자를 여러개 정의해 이를 통해서 다양한 방식으로 객체를 초기화 할 수 있다.
생성자의 특징으로는
1. 클래스의 이름과 동일 : 생성자의 이름은 클래스 이름과 동일해야한다.
2. 리턴 타입이 기본적으로 없다 :
생성자는 리턴 타입을 갖지 않으며, 심지어 return할 값이 없다는 의미인 'void' 조차 사용하지 않음.
3. 자동 호출 : 객체가 생성될 때 자동으로 호출된다.
상속으로 보는 자동 호출의 예)
class Animal {
Animal() {
System.out.println("Animal 생성자가 호출되었습니다.");
}
}
class Dog extends Animal {
Dog() {
// 여기에서 super()가 자동으로 호출됨
System.out.println("Dog 생성자가 호출되었습니다.");
}
}
public class Test {
public static void main(String[] args) {
Dog myDog = new Dog(); // Dog 객체를 생성합니다.
// 출력:
// Animal 생성자가 호출되었습니다.
// Dog 생성자가 호출되었습니다.
}
}
Dog 클래스의 객체를 생성할 때, Dog 클래스의 생성자가 자동으로 Animal 클래스의 생성자를 호출한다. (super()를 통해) super는 기본적으로 생략이 가능하며, 이는 Java에서 상속 구조에 있는 객체를 생성할 때 부모 클래스의 생성자가 먼저 호출되어야 하는 것을 의미한다.
4. 오버로딩 가능
같은 이름의 생성자를 여러 개 정의할 수 있으며, 이를 통하여 다양한 방식으로 객체를 초기화할 수 있다.
※ 오버로딩(Overloading)이란?
같은 이름의 메서드를 한 클래스 내에 여러 개 정의하는 것을 의미, 각 메서드는 매개변수의 타입, 개수, 순서가 달라야한다. 오버로딩을 사용하면 같은 기능을 하는 메서드에 대해 다양한 유형의 매개변수를 제공할 수 있어 프로그램의 가독성과 재사용성이 향상된다.
오버로딩의 규칙
- 메소드 이름이 같아야 한다.
- 매개변수의 리스트가 달라야 한다. 이는 매개변수의 개수나 타입, 혹은 이들의 순서가 다를 수 있음을 의미함.
- 반환 타입, 접근 지정자, 예외는 오버로딩을 구분하는 데 영향을 주지 않는다. 즉, 이들은 오버로딩된 메소드들 사이에 달라도 되며, 이러한 차이만으로는 오버로딩이라고 볼 수 없다.
오버 로딩의 예)
public class Calculation {
// 첫 번째 add 메서드: 두 정수의 합을 계산
//add 메서드의 첫 번째 오버로딩으로 두 개의 int 타입 매개변수를 받아 이들의 합을 int 타입으로 반환
public int add(int a, int b) {
return a + b; //a+b의 합을 반환함
}
// 두 번째 add 메서드: 세 정수의 합을 계산 (오버로딩)
//두 번째 오버로딩, 세 개의 int 타입 매개변수를 받아서 이들의 합을 int 타입으로 반환함.
//첫번 째 add 메소드와 이름은 같지만 매개변수의 개수가 다르다.
public int add(int a, int b, int c) {
return a + b + c;
}
// 세 번째 add 메서드: 두 실수의 합을 계산 (오버로딩)
//두개의 double 타입 매개변수를 받아와 이들의 합을 double형으로 반환한다.
//다른 두개의 add 메소드와 이름은 같지만, 매개변수의 타입이 다름
public double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
//Caluclation 클래스의 인스턴스를 생성 후 , calc를 참조변수로 가르킴
Calculation calc = new Calculation();
//각각의 calc 참조변수에 합을 더한다.
System.out.println(calc.add(2, 3)); // 두 정수의 합
System.out.println(calc.add(2, 3, 4)); // 세 정수의 합
System.out.println(calc.add(2.5, 3.5)); // 두 실수의 합
}
}
예시에서는 'add'라는 공통의 이름을 가진 메소드 이지만, 각각 다른 자료형과 매개변수의 값을 가지며 다른 동작을 하는 것을 알 수 있다.(Overroading 의 특징 중 재사용성의 증가를 나타냄)
'this' 란?
'this' 는 현재 객체, 즉 현재 인스턴스를 가리키는 데 사용된다. this는 주로 현재 클래스의 인스턴스 변수나 메서드를 다른 메서드나 생성자에서 참조할 때 사용함.
this는 주로 다음과 같은 상황에서 유용하다.
1. 현재 클래스의 필드(멤버 변수)와 매개변수 이름이 같을 때 구별하기 위해
2. 현재 클래스의 다른 생성자를 호출할 때
3. 메서드에서 현재 객체를 반환할 때
public class Person {
private String name;
private int age;
// 생성자에서 this 키워드 사용
public Person(String name, int age) {
//매개변수로 받은 name, age를 현재 필드의 name과 age에 할당함
//여기서 this의 경우는 현재 생성되고 있는 Person 객체를 가리킨다.
this.name = name;
this.age = age;
}
// 메서드에서 다른 메서드 호출에 this 키워드 사용
public void printInfo() {
//printInfo 메서드 내에서 this를 명시하지않고 printName()과 printAge() 메서드를 호출
//여기서 this는 생략 가능하다. this.printName()과 this.printAge()로 작성해도 동일하게
//현재 인스턴스의 printName과 printAge 메서드를 호출함.
printName();
printAge();
}
public void printName() {
System.out.println(this.name);
}
public void printAge() {
System.out.println(this.age);
}
// this를 반환하는 메서드
public Person updateAge(int age) {
//pdateAge 메서드는 age 필드의 값을 업데이트하고, 현재 객체(this)를 반환함
this.age = age;
return this;
}
public static void main(String[] args) {
//Person 객체를 생성하여 생성 초기값을 John Doe, 30으로 지정함
Person person = new Person("John Doe", 30);
person.printInfo(); // 초기값 John Doe와 30을 출력
person.updateAge(31).printInfo(); // 나이를 31로 업데이트하고, 다시 정보를 출력함
}
}
이 예제를 통해 this 키워드가 현재 객체의 인스턴스 변수에 접근하기 위해 어떻게 사용되는지 보여준다.
'Java' 카테고리의 다른 글
Calendar 클래스를 이용해 주민번호를 통해 나이 구하기 (0) | 2024.03.24 |
---|---|
[Java] 상속과 Override (1) | 2024.03.23 |
[JAVA] 시험 결과를 출력하고, 점수에 따라 등수를 차등으로 출력하는 문제 (1) | 2024.03.21 |
[JAVA] Charater Class, Integer 클래스를 이용해 주민 번호의 합을 구하는 문제 (0) | 2024.03.21 |
[JAVA] Charater Class를 이용해서 대소문자를 바꿔서 출력하기 (0) | 2024.03.21 |