[Java] 생성자

2024. 7. 8. 20:26· Java
목차
  1. 1. 생성자
  2. 1-1. 생성자는 왜 필요한가?
  3. 1-2. this
  4. 1-3. 생성자
  5. 1-4. 기본 생성자
  6. 1-5. 생성자 오버로딩과 this()

1. 생성자

1-1. 생성자는 왜 필요한가?

  • 객체를 생성하고 나면 멤버 변수 값을 초기화 해야 함
  • 생성자가 없다면? ⇒ 객체의 멤버 변수 초기화 과정을 반복해야 함
  • (객체 지향 프로그래밍) 객체 생성 시점에 객체가 자기 자신의 데이터를 초기화하는 기능 ⇒ 생성자 통해서!

 

1-2. this

  • "자기 자신 객체 (인스턴스) 의 참조"
public class Student {
	String name;
	int age;
	int grade;
	
	void initStudent(String name, int age, int grade) {
		// this : 자기 자신 객체를 가리킴
		this.name = name;
		this.age = age;
		this.grade = grade;
	}
}

 

  • 멤버 변수와 메서드의 매개변수 우선순위
    • 매개변수 ⇒ 코드 블럭 상 내부에 위치
📌 우선순위

매개변수 > 멤버 변수

          ⇒ 따라서 멤버 변수에 접근하려면 멤버 변수 앞에 this. 을 붙여야 함!!

  • this 생략
    • 변수 찾을 때, 가까운 지역변수 (매개변수 또한 지역변수) > 멤버 변수 순으로 찾음
    • 매개변수와 멤버 변수 이름이 다른 경우에는 this 생략 가능!
public class Student {
	String name;
	
	void initStudent(String nameInput) {
		name = nameInput;    // this. 생략 가능!
	}
}

 

1-3. 생성자

  • 객체를 생성하는 시점에 즉시 필요한 초기화를 실행

1-3-1. 생성자 규칙

  • 1. 클래스 이름과 동일해야 함
  • 2. 반환 타입 x
public class Student {
	String name;
	int age;
	int grade;

	// 생성자 선언 예시
	Student(String name, int age, int grade) {
		this.name = name;
		this.age = age;
		this.grade = grade;
	}
}

 

 

1-3-2. 생성자 호출

  • new 생성자이름 (매개변수) ( = new 클래스이름 (매개변수) )
public class Main {
	public static void main(String[] args) {
		
		// 생성자 호출
		Student student1 = new Student("학생1", 20, 90);
	}
}

 

 

1-3-3. 생성자의 장점

  • 중복 코드 제거 (객체 생성과 동시에 멤버 변수 초기화 가능)
  • 필수값 입력 보장 가능
    • 직접 정의한 생성자 존재하면 ⇒ 직접 정의한 생성자를 반드시 호출해야 함!
      • 호출하지 않으면 컴파일 오류 발생
    • 초기화 안 되어있는 경우는 절대 발생하지 x!

 

1-4. 기본 생성자

  • 매개변수가 없는 생성자
public class Student {
	String name;
	int age;
	int grade;
	
	// 기본 생성자
	public Student() {
	}
}

 

  • 직접 정의한 생성자가 존재하지 않으면 자바가 자동으로 기본 생성자 생성해줌!
  • 직접 정의한 생성자가 하나라도 존재하면 기본 생성자를 자동으로 생성해주지 x!
📌 자동 생성된 기본 생성자는 클래스와 동일한 접근 제어자를 가짐!
public class Student {
	String name;
	int age;
	int grade;
}

public class Main {
	public static void main(String[] args) {
		
		// (자동 생성된) 기본 생성자 호출
		Student student1 = new Student();
	}
}

 

1-5. 생성자 오버로딩과 this()

1-5-0. 메서드 오버로딩

2023.12.10 - [Java] - [Java] 메서드 오버로딩, 메서드 오버라이딩 (Method Overloading, Method Overriding)

 

[Java] 메서드 오버로딩, 메서드 오버라이딩 (Method Overloading, Method Overriding)

1. 메서드 오버로딩 (Method Overloading)자바에서 같은 이름의 메서드를 여러개 정의하는 것을 오버로딩 (Overloading) 이라고 함즉, 이름이 같고 매개변수가 다른 메서드를 여러 개 정의하는 것을 의미 

blogan99.tistory.com

 

1-5-1. 생성자 오버로딩

  • 생성자 오버로딩도 메서드 오버로딩과 동일!
public class Student {
	String name;
	int age;
	int grade;
	
	// 이름만 초기화, 나머지는 기본값으로 초기화 하는 생성자
	Student(String name) {
		this.name = name;
		this.age = 20;
		this.grade = 50;
	}
	
	// 이름과 나이를 초기화, 나머지는 기본값으로 초기화 하는 생성자
	Student(String name, int age) {
		this.name = name;
		this.age = age;
		this.grade = 50;
	}
	
	// 이름, 나이, 등급 모두 초기화 하는 생성자
	Student(String name, int age, int grade) {
		this.name = name;
		this.age = age;
		this.grade = grade;
	}
}

 

1-5-2. this()

  • 위의 생성자 오버로딩 예제 코드에서 중복 코드가 많음
  • this() : 클래스 내부에서의 다른 생성자 호출 기능 ⇒ 중복 코드 줄임!
📌 this() : 자기 자신 클래스의 다른 생성자 호출
public class Student {
	String name;
	int age;
	int grade;
	
	// this() 사용 => 3번째 생성자 호출
	Student(String name) {
		this(name, 20, 50);
	}
	
	// this() 사용 => 3번째 생성자 호출
	Student(String name, int age) {
		this(name, age, 50);
	}
	
	// 이름, 나이, 등급 모두 초기화 하는 생성자
	Student(String name, int age, int grade) {
		this.name = name;
		this.age = age;
		this.grade = grade;
	}
}

 

1-5-3. this() 규칙

1. 생성자 안에서만 사용 가능함!
2. 생성자 코드의 가장 첫줄에서만 사용 가능함!
저작자표시 변경금지 (새창열림)

'Java' 카테고리의 다른 글

[Java] 객체 지향 프로그래밍 - 캡슐화 (Encapsulation)  (0) 2024.07.08
[Java] 접근 제어자 (Access Modifier)  (0) 2024.07.08
[Java] 객체 지향 프로그래밍 (Object-Oriented Programming, OOP)  (0) 2024.07.08
[Java] 기본형과 참조형  (0) 2024.07.08
[Java] 클래스  (0) 2024.07.08
  1. 1. 생성자
  2. 1-1. 생성자는 왜 필요한가?
  3. 1-2. this
  4. 1-3. 생성자
  5. 1-4. 기본 생성자
  6. 1-5. 생성자 오버로딩과 this()
'Java' 카테고리의 다른 글
  • [Java] 객체 지향 프로그래밍 - 캡슐화 (Encapsulation)
  • [Java] 접근 제어자 (Access Modifier)
  • [Java] 객체 지향 프로그래밍 (Object-Oriented Programming, OOP)
  • [Java] 기본형과 참조형
공대생안씨
공대생안씨
전자공학과 학부생의 코딩 일기
공대생의 코딩 일기전자공학과 학부생의 코딩 일기
티스토리
|
로그인
공대생안씨
공대생의 코딩 일기
공대생안씨
글쓰기
|
관리
전체
오늘
어제
  • All Categories (153)
    • Spring Boot (46)
      • JPA (7)
      • Lombok (2)
    • Java (21)
    • DevOps (3)
      • CI,CD (8)
      • Monitoring (2)
    • Database (7)
      • MySQL (5)
      • MongoDB (1)
      • H2 (1)
    • Trouble Shooting (5)
    • FE (4)
    • IntelliJ (3)
    • Git (3)
    • Algorithm (41)

블로그 메뉴

  • 홈
  • 태그
  • Github

공지사항

인기 글

hELLO · Designed By 정상우.v4.2.2
공대생안씨
[Java] 생성자
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.