Heap, Stack, Static
- static : 시작부터 메모리에 load 되어 있음
- heap : 호출 시 메모리에 load
- stack : 메서드 등에 의해 잠깐 load 되었다가 사라짐
package ex00;
class Animal {
static String name = "강아지"; // static 공간에 name 뜸
void speak() {
String sound = "멍멍"; // stack 공간에 sound 잠깐 뜸
System.out.println(sound);
}
}
public class Mem01 {
public static void main(String[] args) {
System.out.println(Animal.name); // static 공간에 name 찾음
Animal a = new Animal(); // heap 생성 (speak 메모리에 뜸)
a.speak();
}
}

상속 클래스 : 부모의 성질과 내 성질을 동시에 가짐 (Is 관계)
- 소나타는 자동차이다. (O) → 소나타는 자동차의 성질을 가짐.
- 자동차는 소나타이다. (X) → 자동차가 소나타의 성질을 가지지 않음. (추상 관계 오류)
- 소나타보다 자동차가 더 추상적인 개념 → 자동차는 부모 클래스
- 소나타는 자동차이자 소나타임 → 상속받은 자식 클래스는 부모 클래스의 성질도 가짐
package ex00;
abstract class Car { // 추상화 : 여러 객체들을 하나의 타입으로 관리할 수 있음
abstract void run();
}
class Genesis extends Car {
// 메서드 재정의
@Override
void run() {
System.out.println("Genesis run");
}
}
// 상속 클래스
class Sonata extends Car {
// 메서드 재정의
void run() {
System.out.println("Sonata run");
}
}
public class Mem02 {
static void start(Car c) {
c.run();
}
public static void main(String[] args) {
Car car1 = new Sonata();
car1.run(); // 부모 메서드 무효화 & 자식 메서드 실행 : 동적 바인딩
// 상속 중이면서 메서드 재정의를 했을 경우만 가능
start(car1);
Car car2 = new Genesis();
car2.run();
start(car2);
}
}

Share article