728x90
참 생각없이 쓰면 쉬운 생성자와 초기화..
하지만 조금이라도 알고나면 코드를 짜거나 할때 생각을 하며 더욱 질좋은 코드를 짤 수 있다!
생성자
- 생성자는 인스턴스가 생성될 때 호출 되는 '인스턴스 초기화 메서드'(객체 초기화)
- 초기화란 쉽게 말해 원하는 초기값을 세팅해 준다고 생각하면 된다
- 생성자를 생성할 때 규칙
- 이름이 클래스 이름과 같아야 한다.
- 생성자는 리턴값이 없다.(void 안붙임)
- 모든 클래스는 반드시 생성자를 가져야 한다.
기본 생성자
- 형태 : 클래스이름(){} -> Card() { }
- 매개변수가 없는 생성자
- 생성자가 하나도 없을 때만 -> 컴파일러가 자동 추가
- 기본 생성자가 컴파일러에 의해서 추가되는 경우는 클래스에 정의된 생성자가 하나도 없을때 뿐!
- 즉 클래스안에 다른 생성자가 하나라도 있으면, 기본 생성자가 자동으로 추가 되지 않기 때문에 새로 쓸때는 직접 내가 생성자를 넣어줘야 한다.
🕸️ 매개변수가 있는 생성자
- 매개변수가 있는 생성자를 만들어준다면, 인스턴스를 생성하는 동시에 원하는 값으로 초기화 할 수 있다!
- 인스턴스를 생성한 다음 -> 인스턴스 변수의 값을 변경하는 것 보다 낫다!
- (오른쪽 핑크 박스) -> 간결해진다.직관적이다.
생성자 this()
- 같은 클래스의 멤버들 간에 서로 호출 할수 있는것 처럼 생성자 간에도 호출이 가능!
- 생성자에서 다른 생성자 호출할 때 사용
- 다른 생성자 호출시 첫 줄에만 사용 가능
- 중복을 제거한 코드(왼쪽->오른쪽)
- 아무값도 입력하지 않으면 "white","auto",4가 생성됨(초기화값) 이것을 코드 중복을 제거 하고 this를 사용한다.
- tip : 코드 중복을 제거하려면 어느 한쪽이 다른 한 쪽을 호출하게 만들어 주면 된다 (위 그림도, 위 코드에서 아래 코드를 호출하게 만듬)
참조변수 this (this != this())
- 생성자 this() 와는 전혀 다르다!
- 인스턴스 자기 자신을 가리키는 참조변수
- 인스턴스 메서드(생성자 포함)에서 사용가능
- 클래스 메서드(static메서드) 에서는 사용 불가
- 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용
- this.xxx가 붙어야 인스턴스 변수로 인식을 한다.
- 아니면 지역변수(매개변수로 인식을 함)
정리하자면,
참조변수 this
- 인스턴스 자신을 가리키는 참조변수
- 인스턴스의 주소가 저장되어 있다.
- 모든 인스턴스 메서드에 지역변수로 숨겨진 채 존재한다.
VS
생성자 this(), this(매개변수)
- 생성자. 같은 클래스의 다른 생성자를 호출 할때 사용한다
- 마지막 static 붙은 코드에서는 this를 사용할 수 없다. 이유는 static 메서드는 객체 생성없이 호출 하기 때문에 인스턴스 변수를 사용할수 없다
변수의 초기화
- 지역변수(lv)는 수동 초기화 해야함! (사용전에 꼭!)
- 멤버변수(클래스 안에서 선언됨)는 자동 초기화 된다!
- 지역변수(메서드or생성자 안에서 선언됨)는 자동으로 안 됨!
멤버변수의 초기화 3가지 방법
1. 자동 초기화
- 0으로 만들어 준다
2. 간단 초기화
- 명시적 초기화 (=) 사용
class Car{ int door = 4; // 기본형 변수의 초기화 Engine e = new Engine(); // 참조형 변수의 초기화 = null or 객체의 주소(객체를 넣어주는게 초기화) }
3. 복잡 초기화
- 초기화 블럭
- 인스턴스 초기화 블럭 : {} - 인스턴스 변수의 복잡한 초기화에 사용
- 클래스 초기화 블럭 : static {} - 클래스 변수의 복잡한 초기화에 사용
- 생성자
- 인스턴스 변수(iv) 초기화
- 복잡한 초기화
멤버 변수의 초기화 시기와 순서
- 클래스 변수 (먼저)
- 초기화 시점 : 클래스가 처음 로딩될 때 단 한 번
- 초기화 순서 : 기본값 - > 명시적 초기화 ->클래스 초기화 블럭
- 인스턴스 변수 (클래스 변수 초기화 후)
- 초기화 시점 : 인스턴스가 생성될 때 마다
- 초기화 순서 : 기본값 - > 명시적 초기화 ->인스턴스 초기화 블럭->생성자
'JAVA' 카테고리의 다른 글
Exception! - 체크 예외와 언체크 예외 (0) | 2023.02.05 |
---|---|
자바의 다형성 (짧음 주의) (0) | 2023.02.05 |
Java - 선언 위치에 따른 변수의 종류 (0) | 2023.02.05 |
Java - 메소드(Method) 선언 (0) | 2023.02.05 |
클래스 메서드와 인스턴스 메서드 (0) | 2023.02.05 |