TIL - JAVA 생성자, 내부클래스

DY_DEV·2023년 2월 26일
0

TIL

목록 보기
4/17

2월24일 TIL 요약정리!!

생성자

객체를 생성하는 역할을 하는 클래스의 구성 요소.

인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드

인스턴스 생성을 담당하는 것은 new 키워드이며, 생성자는 인스턴스 변수들을 초기화하는 데 사용되는 특수한 메서드라 할 수 있습니다.

  • 메서드와의 차이점
    • 생성자의 이름은 반드시 클래스의 이름과 같아야한다.
    • 생성자는 리턴 타입이 없다.
class Car {
    public String model;
    public String color;

    public Car(){} // 기본생성자. 생성자가 없는 경우 자동 생성

		// 생성자 오버로딩
    public Car(String model, String color) { // 매개변수가 있는 생성자
        this.model = model;
        this.color = color;
    }

**기본 생성자(Default Constructor)**

모든 클래스에는 반드시 하나 이상의 생성자가 존재해야된다. 생성자를 따로 만들지 않아도 정상적으로 인스턴스를 만들 수 있었던 이유는 만약 생성자가 클래스 안에 포함되어 있지 않은 경우에는 자바 컴파일러가 기본 생성자를 자동으로 추가해줬기 때문이다.

매개변수가 있는 생성자

매개변수가 있는 생성자는 메서드처럼 매개변수를 통해 호출 시에 해당 값을 받아 인스턴스를 초기화하는 데 사용됩니다.

  • 고유한 특성을 가진 인스턴스를 계속 만들어야하는 경우 인스턴스마다 각기 다른 값을 가지고 초기화할 수 있어서 매우 유용

this()

생성자의 상호 호출을 가능하게 하는 메서드

this() 메서드는 자신이 속한 클래스에서 다른 생성자를 호출하는 경우에 사용합니다.

  • 사용 조건
    • this() 메서드는 반드시 생성자의 내부에서만 사용할 수 있습니다.
    • this() 메서드는 반드시 생성자의 첫 줄에 위치해야 합니다.

this 키워드 (앞의 this 메서드와 다름)

인스턴스 변수와 매개변수를 이름만으로는 구분하기 어려운 경우 구분을 위해 사용된다.

  • 모든 메서드에는 자신이 포함된 클래스의 객체를 가리키는 this라는 참조변수가 있는데, 일반적인 경우에는 컴파일러가 this.를 추가해주기 때문에 생략하는 경우가 많습니다.
  • this.modelName = modelName대신 modelName = modelName
    라고 작성하면 둘 다 지역변수로 간주되게 됩니다.

this는 인스턴스 자신을 가리키며, 우리가 참조변수를 통해 인스턴스의 멤버에 접근할 수 있는 것처럼 this를 통해서 인스턴스 자신의 변수에 접근할 수 있습니다. 또한 this 키워드는 주로 인스턴스의 필드명과 지역변수를 구분하기 위한 용도로 사용됩니다.

내부 클래스

클래스 내부에 선언된 클래스. 내, 외부 클래스가 서로 연관되어 있을 때 사용한다.

  • 장점:
    • 내부 클래스를 사용하면 외부 클래스의 멤버들에 쉽게 접근 할 수 있고, 코드의 복잡성을 줄일 수 있다.
    • 외부적으로 불필요한 데이터를 감출 수 있다. (캡슐화)
    • 인스턴스 내부 클래스, 정적 내부 클래스, 지역 내부 클래스
    • 익명 내부 클래스: 클래스의 선언과 객체의 생성을 동시에 수행하는 일회용 내부 클래스(수업 자료에서는 생략)

기본적으로 내부 클래스는 외부 클래스 내에 선언된다는 점을 제외하면 일반 클래스와 차이점이 없습니다. 단지 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용의 편의성을 고려하여 만들어진 문법 요소입니다.

class Outer { // 외부 클래스

	class Inner {
		// 인스턴스 내부 클래스
	}

	static class StaticInner {
		// 정적 내부 클래스
	}

	void run() {
		class LocalInner {
		// 지역 내부 클래스
		}
	}
}

인스턴스 내부 클래스는 객체 내부에 멤버의 형태로 존재하며, 외부 클래스의 모든 접근 지정자의 멤버에 접근할 수 있습니다.

정적 내부 클래스

내부 클래스가 외부 클래스의 존재와 무관하게 정적 변수를 사용할 수 있게한다.

  • 정적 내부 클래스는 인스턴스 내부 클래스와 동일하게 클래스의 멤버 변수 위치에 정의하지만, static 키워드를 사용한다는 점에서 차이

지역 내부 클래스

클래스의 멤버가 아닌 메서드 내에서 정의되는 클래스

메서드 내부에서만 사용가능하기 때문에 일반적으로 메서드 안에서 선언 후에 바로 객체를 생성해서 사용

0개의 댓글