SEB_BE 12일차 - Java객체지향기초2

subimm_·2022년 9월 5일
0

코드스테이츠

목록 보기
13/83

오늘의 학습목표

  • 생성자
  • 내부 클래스

📔 생성자

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

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

  • 오버로딩이 가능

  • 생성자와 메서드의 차이

  1. 생성자의 이름은 반드시 클래스의 이름과 같아야 한다.
  2. 생성자는 리턴 타입이 없다.(void 키워드 사용x)
클래스명(매개변수) { //생성자 기본 구조
..
}
Constructor constructor1 = new Constructor();
Constructor constructor1 = new Constructor("Hi");
Constructor constructor1 = new Constructor(1,2);

class Constructor {
	Constructor() { //생성자 오버로딩
    	System.out.println("1번");
    }
    Constructor(Sring str) { //생성자 오버로딩
    	System.out.println("2번");
    }
    Constructor(int a, intb) { //생성자 오버로딩
    	System.out.println("3번");
    }
  • 기본 생성자 vs 매개변수가 있는 생성자
    • 기본 생성자
      모든 클래스에는 반드시 하나 이상의 생성자가 존재
      (자바 컴파일러가 매개변수가 없는 기본 생성자를 자동으로 추가)
      클래스명(){}

    • 매개변수가 있는 생성자
      호출 시에 해당 값을 받아 인스턴스를 초기화
Car bmw = nwe Car("Model a", "파란색"); //매개변수로 초기화
System.out.println("내 차는 " +bmw.getModelName() + "이고, 색은 " + bmw.getColor() + "이다.");


class Car {
	private String modelName;
    private String color;
    
    public Car(String modelName, String color){
    	this.modelName = modelName; //this 키워드로 인스턴스 변수 구분
        this.color = color;
    }
    public String getModelName(){
    	return modelName;
    }
    public String getColor(){
    	return color;
    }
    // 출력
    내 차는 Model a이고, 색은 파란색입니다.
  • this vs this()
    • this()
      자신이 속한 클래스에서 다른 생성자를 호출하는 경우
    1. this() 메서드는 반드시 생성자의 내부에서만 사용
    2. this() 메서드는 반드시 생성자의 첫 줄에 위치
class Example  {
    public Example() {
        System.out.println("기본 생성자 호출");
    };

    public Example(int x) {
        this(); //다른 생성자 호출
        System.out.println("두 번째 생성자 호출");
    }
}

//출력
기본 생성자 호출
기본 생성자 호출
두 번째 생성자 호출
  • this
    인스턴스 자신을 가리키며 인스턴스 자신의 변수에 접근
    인스턴스의 필드명과 지역변수를 구분하기 위한 용도
    (위의 Car 예제 참고)

📔 내부 클래스

  • 클래스 내에 선언된 클래스
class Outer { // 외부 클래스
	class Inner {
    	// 인스턴스 내부 클래스
    }
    static class StaticInner {
    	// 정적 내부 클래스
    }
    void run() {
    	class LocalInner {
        //지역 내부 클래스
        }
    }
}
  • 인스턴스 내부 클래스
    객체 내부에 멤버의 형태로 존재
    외부 클래스의 모든 접근 지정자의 멤버에 접근 가능
    정적 변수와 정적 메서드는 인스턴스 내부 클래스에서 선언x

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



  • 지역 내부 클래스
    메서드 내에서 정의되는 클래스
    메서드 안에서 선언 후에 바로 객체를 생성해서 사용
  • this 예제
class A{
	int m;
	int n;
	void init(int m, int n) {
		// 필드에 존재하는 m,n 값에 대입
		this.m = m;
		this.n = n;
	}
}

public class Class_cons {
	public static void main(String[] args) {		
		// 필드명과 지역 변수명이 같고, this 키워드를 사용.
		A b = new A();
		b.init(3, 5);
		System.out.println(b.m); // 3
		System.out.println(b.n); // 5
	}
}

회고

객체지향 개념이 어려워서 아직은 잘 모르겠다. 추가 공부를 해서 더 알아가야 될 것같다.

profile
코린이의 공부 일지

0개의 댓글