Notice
Recent Posts
Recent Comments
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
10-11 00:15
Archives
Today
Total
관리 메뉴

Developer_Neo

[코드스테이츠 백엔드 2기(40기) SEB BE] 12일차 본문

코드스테이츠

[코드스테이츠 백엔드 2기(40기) SEB BE] 12일차

_Neo_ 2022. 7. 8. 10:34
반응형

오늘 나의 학습 목표는 무엇인가요?

-  생성자와 내부 클래스를 배운다.

 

오늘 학습할 내용 중에 이미 알고 있는 내용은 무엇인가요?

     -


생성자

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

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

- new 키워드를 사용하여 객체를 생성할 때에 호출되는 것이 이것이다.

- 하지만 이것은 인스턴스를 생성하는 역할은 아닙니다. 이것의 역할은 인스턴스 변수들을 초기화하는데 사용되는 메서드입니다.

 

조건

1. 생성자의 이름은 반드시 클래스의 이름과 같아야한다.

2. 생성자는 리턴타입이 없다.

클래스명(매개변수) { // 생성자 기본 구조
	...생략...
}

extra) 생성자도 오버로딩이 가능하므로 매개변수의 타입과 갯수에 따라서 여러개가 존재할 수 있다.

public class ExampleMain {
    public static void main(String[] args) {
        Example example1 = new Example();
        Example example2 = new Example("Hello World");
        Example example3 = new Example(5,10);
    }
}

class Example {
    Example() { // (1) 생성자 오버로딩
        System.out.println("1번 생성자");
    }

    Example(String str) { // (2) 
        System.out.println("2번 생성자 "+str);
    }

    Example(int a, int b) { // (3) 
        System.out.println("3번 생성자 "+(a+b));
    }
}


/*출력결과
1번 생성자
2번 생성자 Hello World
3번 생성자 15
*/

생성자를 만들어주지 않았을 때 기본적으로 있는 것은 위에서 (1)생성자에 해당하는 것이다.

 

만약 객체 생성할때 아무런 매개변수를 전달하지 않는다고 한다면 (1)생성자도 클래스내에 적어주어야한다.

 

즉, 클래스내에 생성자를 아무것도 적지 않았을 때 (1)생성자가 기본적으로 있다고 되어 아무런 매개변수를 전달하지 않는 객체 생성에 문제가 없지만,

생성자를 적었을 때  (1)생성자를 코드로 존재해야 아무런 매개변수를 전달하지 않는 객체 생성에 문제가 없다.

 

this vs this()

this()

- 자신이 속한 클래스에서 다른 생성자를 호출하는 경우에 사용

조건

1. 반드시 생성자의 내부에서만 사용할 수 있습니다.
2. 반드시 생성자의 첫 줄에 위치해야 합니다.
public class Main {
    public static void main(String[] args) {
        Example example1 = new Example();
        Example example2 = new Example(5);
    }
}

class Example  {
    public Example() {
        System.out.println("기본 생성자!");
    };

    public Example(int x) {
        this();
        System.out.println("두 번째 생성자!");
    }
}

//Output
기본 생성자!
기본 생성자!
두 번째 생성자!

 

this 

- 생성자 또는 메서드의 매개변수와 인스턴스 변수이름간 구분이 불가능한 경우 사용

ex) this.name = name

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }
}

- 인스턴스 자신을 가리키며, 우리가 참조변수를 통해 인스턴스의 멤버에 접근할 수 있는 것처럼 this를 통해서 인스턴스 자신의 변수에 접근할 수 있는 것이다.

 


내부클래스

- 클래스 내에 선언된 클래스

- 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용

 

내부 클래스의 종류와 선언위치

종 류 선언 위치 용 가능한 변수
인스턴스 내부 클래스(instance inner class) 외부 클래스의 멤버변수 선언위치에 선언(멤버 내부 클래스) 외부 인스턴스 변수, 외부 전역 변수
정적 내부 클래스(static inner class) 외부 클래스의 멤버변수 선언위치에 선언(멤버 내부 클래스) 외부 전역 변수
지역 내부 클래스(local inner class) 외부 클래스의 메서드나 초기화블럭 안에 선언 외부 인스턴스 변수, 외부 전역 변수
익명 내부 클래스(anonymous inner class) 클래스의 선언과 객체의 생성을 동시에 하는 일회용 익명 클래스 외부 인스턴스 변수, 외부 전역 변수
class Outer { // 외부 클래스
	
	class Inner {
		// 인스턴스 내부 클래스	
	}
	
	static class StaticInner {
		// 정적 내부 클래스
	}

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

 

자세한 예는 코드스테이츠의 내부클래스 파트

 

약간의 설명을 하자면

인스턴스내부 클래스는 외부 클래스안에 클래스를 하나 더 적는 것인데 이때 외부 클래스의 생성자에 인스턴스내부클래스에 대한 것을 new를 통해 생성해놓아야 외부 클래스나 내부 클래스에서 내부 클래스의 메소드를 사용할 수 있다.

 

정적 내부 클래스는 외부 클래스를 생성하지않고 정적이니 외부클래스.정적내부클래스를 통해 new하여 정적내부클래스의 인스턴스를 생성해낼 수 있다.

 

지역 내부 클래스의 경우에는 외부 클래스의 메서드 안에 쓰이는 것으로 메서드 내에서 클래스를 작성하고 new를 통해 생성해 메서드를 사용한다.

 

 

 


오늘 학습 내용 중 새롭게 배운 내용은 무엇인가요?

       -  내부 클래스에 대한 자세한 내용들

 

오늘 새롭게 학습한 내용을 다른 사람에게 설명할 수 있나요?

      - 네

 

오늘 학습한 내용 중 아직 이해되지 않은 불확실한 내용은 무엇인가요?

     -  없습니다.

 

이해되지 않은, 불확실한 내용을 보완하기 위해서 나는 무엇을 할 수 있을까요?

     -  구글링을 해본다.

 

나의 오늘 학습 만족도는 몇 점인가요?

     - 90점 (아는 내용들이라고 설렁설렁 넘어간 것들이 있는 것같다.)

반응형
Comments