[Java] 객체지향 프로그래밍-2

·2022년 9월 5일
0

Java

목록 보기
2/14
post-thumbnail

생성자와 내부 클래스

생성자

생성자란?

생성자의 정의

  • 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
	Card c = new Card();   // Card() -> 생성자 호출

💡 인스턴스 = iv의 묶음
따라서 생성자는 인스턴스 변수 초기화 메서드라고도 할 수 있다.

생성자의 특징

  1. 생정자의 이름은 클래스명과 일치해야 한다.
  2. 생성자는 대입문만 존재하기 때문에 리턴값이 존재하지 않음
    (리턴문의 존재 유무가 아예 논외이기 때문에 반환값 타입인 void를 붙이지 않는다.)
  3. 모든 클래스는 반드시 한 개 이상의 생성자를 가지고 있어야 한다.
  4. 생성자도 메서드이기 때문에 오버로딩 가능!

    💡 만약 생성자를 하나도 가지고 있지 않다면 컴파일러가 자동으로 기본 생성자를 생성해준다.

생성자의 기본 형태

	클래스명(매개변수){...}

매개변수가 없으면 기본 생성자, 있으면 매개변수가 있는 생성자로 구분한다.

기본 생성자

: 매개변수와 메서드 내 함수가 없는 생성자

	호출 방법
	Card c = new Card();
    기본생성자
    Card(){}      // 다른 생성자가 없으면 생략 가능. 왜? 컴파일러가 자동으로 만들어주니까.

매개변수가 없는 생성자

	호출 방법
	Card c = new Card();
    기본생성자
    Card(){
       ....    //System.out.println();과 같은 함수가 온다.
    }     

매개변수가 있는 생성자

	호출 방법
	Card c = new Card(4, "clover", "king");
    매개변수가 있는 생성자
    Card(int cardNum, String shape, String role) {
    this.cardNum = cardNum;
    this.shape = shape;
    this.role = role;
    }

💡 매개변수가 있는 생성자를 사용 하는 이유
변수의 값을 입력하는 코드들을 줄이기 위해 필요하다.

생성자 예시코드

  • 매개변수가 있는 생성자를 호출할 때, 매개변수를 입력하지 않고 호출할 경우 => 에러발생!
Card c = new Card();

Card(int cardNum, String shape, String role) {
    this.cardNum = cardNum;
    this.shape = shape;
    this.role = role
    }
  • 해결 방법
  1. 매개변수 값을 입력한다.
  2. 클래스에 기본 생성자를 추가한다.

생성자 this()

: 같은 클래스 내에서 다른 생성자를 호출할 때 사용
코드의 중복을 제거하기 위해 사용 한다.

생성자 this()를 사용하기 위한 두가지 요소

  1. 반드시 생성자 내부에서만 사용 가능
  2. 반드시 생성자의 첫 줄에 위치해야 한다.
	Car (String color) {
	door = 5;
	Car(color, "auto", 4); // 에러. 다른생성자를 호출할 때는 this()를 사용한다.
}

	Car (String color) {
	door = 5;
	this(color, "auto", 4); // 에러. 생성자 this()는 첫 줄에 존재 해야 한다.
}

참조변수 this

: 인스턴스 자신을 가리키는 참조변수

  • 인스턴스 메서드(생성자 포함)에서 사용 가능
  • 인스턴스 변수와 지역 변수를 구별할 때 사용한다.
class Card {
	int cardNum;
    String shape;
    String role;
    
    public CardShake(int cardNum, String shape, Sting role) {
    	this.cardNum = cardNum; // this.cardNum=iv, cardNum=lv
        this.shape = shape;     // this.shape=iv, shape=lv
        this.role = role;       // this.role=iv, role=lv

💡 같은 클래스 내에 지역변수의 이름과 인스턴스 변수의 이름이 다를 경우엔 생략 가능!

내부 클래스

내부 클래스란?

  • 클래스 내에 선언된 클래스
  • 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용

멤버 내부 클래스

인스턴스 내부 클래스

: 객체 내부에 멤버의 형태로 존재, 외부 클래스의 모든 접근 지정자의 멤버에 접근 가능

  • 기본적으로 내부 클래스는 외부 클래스의 존재에 의존

정적 내부 클래스

: static + 인스턴스 내부 클래스

  • 내부 클래스가 외부클래스의 존재와 무관하게 정적 변수를 사용

지역 내부 클래스

: 메서드 내에서 정의되는 클래스

  • 메서드 안에서 선언 후 바로 객체를 생성 및 사용
profile
🧑‍💻백엔드 개발자, 조금씩 꾸준하게

0개의 댓글