💡 해당 글은 『자바의 신 3판』을 복습하며 도서의 내용과 본인의 주관적인 생각을 정리한 글입니다.
☁️ 내용정리
Reference type
참조 자료형(reference type)은 primitive type을 제외한 모든 자료형이다.
reference type은 primitive type과 다르게 heap의 인스턴스를 참조하는 주소 값을 가진다.
일반적으로 new 키워드를 통해 초기화할 수 있다.
생성자는 몇 개까지 만들 수 있을까?
생성자는 개발자가 원하는 만큼 생성할 수 있다.
다만, overloading의 규칙을 따라야 하기 때문에, 각 생성자는 메서드 파라매터의 시그니처가 달라야 한다.
super()
, this()
키워드를 사용하면 super class, 혹은 자신의 생성자를 호출할 수 있다.
Overloading
메서드 overloading
은 같은 이름의 메서드를 여러 개 생성할 수 있다는 개념이다.
메서드의 파라매터 시그니처(타입, 순서)가 달아야 한다는 규칙이 존재한다.
메서드의 시그니처를 통해 호출해야 하는 메서드를 컴파일 타임에 결정할 수 있기 때문에 컴파일 타임 다형성이라 부를 수 있다.
public int method(int a) { }
public int method(int a, int b) { }
public int method(String s, int a) { }
public int method(int a, String s) { }
public String method(int a) { } // 이건 안됨
public int method(int b, int a) { } // 이건 안됨
This
this란 자신의 객체를 의미한다.
class Test {
private final int a;
public Test(int a) {
this.a = a;
}
}
보통 위와 같이 파라매터로 전달 받은 변수명과 인스턴스 변수명이 동일할 때, 명시적으로 객체의 변수를 가리키기 위해 사용된다.
메서드의 수행과 종료
메서드가 종료되는 조건은 아래와 같다.
- 메서드의 모든 코드가 실행되었을 때
return
코드에 도달했을 때- 예외가 발생한 시점에 catch하지 않고
throw
할 때
메서드가 호출되면 메서드를 호출한 스레드의 stack frame
에 공간이 생긴다.
해당 공간에는 파라매터로 전달된 데이터, 해당 메서드의 지역 변수가 저장된다.
위의 메서드 종료 조건을 만족하면 stack frame에서 pop되어 값을 반환하거나 종료된다.
☁️ 내 생각
아래의 코드를 실행하면 어떻게 출력될까?
class StaticTest {
static {
System.out.println("staticTest block 1");
}
public StaticTest(int number) {
System.out.println("staticTest constructor" + number);
}
static {
System.out.println("staticTest block 2");
}
}
public class Main {
public static void main(String ... args) {
new StaticTest(1);
new StaticTest(2);
}
}
staticTest block 1
staticTest block 2
staticTest constructor1
staticTest constructor2
- 생성자 호출과 함께 static블럭이 먼저 실행된다.
- 처음의 StaticTest의 생성자가 호출된다. // 1
- static은 이미 메모리에 할당되어 있기 때문에 StaticTest의 생성자가 호출된다. // 2
그렇다면 아래의 코드는 어떨까
class StaticTest {
static {
System.out.println("staticTest block 1");
}
static int num = 1;
static {
System.out.println("staticTest block 2");
}
}
public class Main {
public static void main(String ... args) {
System.out.println(StaticTest.num);
}
}
staticTest block 1
staticTest block 2
1
static은 해당 클래스의 호출과 동시에 메모리에 올라가기 때문에 static블럭이 실행된다.
☁️ 질문
- 메서드가 종료되는 조건 3가지는 무엇인가요?
더보기모든 코드가 실행되었을 때, return 예약어를 만났을 때, 예외 발생 시점에 catch하지 않고 throw 할 때
- 메서드 overloading이란 무엇인가요?
더보기같은 메서드명으로 메서드 파라매터 시그니처가 다른 여러 메서드를 선언할 수 있다는 개념
- 메서드의 수행과 종료를 jvm 메모리 시점에서 설명해 주세요.
더보기메서드 호출 시 메서드를 호출한 스레드의 stack frame에 메모리가 할당
메모리에 매개변수와 지역변수의 공간이 할당.
메서드 종료 시 stack frame에서 pop하고 메모리 해제.
'JAVA > 자바의 신' 카테고리의 다른 글
10장. 자바는 상속이라는 것이 있어요 (0) | 2024.01.05 |
---|---|
9장. 자바를 배우면 패키지와 접근 제어자는 꼭 알아야 해요 (0) | 2024.01.05 |
7장. 여러 데이터를 하나에 넣을 수는 없을까요? (0) | 2024.01.04 |
6장. 내가 조건을 좀 따져요 (0) | 2024.01.04 |
5장. 계산을 하고 싶어요 (1) | 2024.01.04 |