[디자인패턴] 0. 메모리 및 상속 클래스

문정준's avatar
Jul 21, 2025
[디자인패턴] 0. 메모리 및 상속 클래스

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(); } }
 
notion image
 

상속 클래스 : 부모의 성질과 내 성질을 동시에 가짐 (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); } }
 
notion image
 
Share article

sxias