Developer_Neo
[코드스테이츠 백엔드 2기(40기) SEB BE] 12일차 본문
오늘 나의 학습 목표는 무엇인가요?
- 생성자와 내부 클래스를 배운다.
오늘 학습할 내용 중에 이미 알고 있는 내용은 무엇인가요?
-
생성자
- 객체를 생성하는 역할을 하는 클래스의 구성 요소
- 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드
- 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점 (아는 내용들이라고 설렁설렁 넘어간 것들이 있는 것같다.)
'코드스테이츠' 카테고리의 다른 글
[코드스테이츠 백엔드 2기(40기) SEB BE] 14일차 (0) | 2022.07.12 |
---|---|
[코드스테이츠 백엔드 2기(40기) SEB BE] 13일차 (0) | 2022.07.11 |
[코드스테이츠 백엔드 2기(40기) SEB BE] 11일차 (0) | 2022.07.07 |
[코드스테이츠 백엔드 2기(40기) SEB BE] 10일차 (0) | 2022.07.06 |
[코드스테이츠 백엔드 2기(40기) SEB BE] 9일차 (0) | 2022.07.05 |