OOP란? 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, '객체'들의 상호작용(메시지 주고받기, 데이터 처리 등)으로 프로그램 로직을 구성하는 프로그래밍 패러다임이다.
Published on September 27, 2023 by 강준우
클래스 Static Heap Stack 오버라이딩 싱글톤패턴
3 min READ
static은 main 메소드가 실행되기 전에 메모리에 단 한 번 로드되기 때문에 프로그램이 실행되는 동안 두번 메모리에 로드하는 방법은 없다.
태양이 static 메모리 공간에 정적 할당된다면! - 두 번 생성할 수 없다. 인간은 heap 메모리 공간에 동적 할당된다. - 계속 생성할 수 있다.
stack 메모리는 가장 짧은 생명주기를 가지는 메모리 공간이다. 메소드가 호출될 때 잠깐 할당되었다가, 메소드가 종료될 때 사라지기 때문에 관리가 필요 없다.
소나타 클래스
new 하기 (자동차를 태어나게 하기) 우선 자동차가 이 세상에 존재해야 한다.
constructor 사용하기 (자동차가 태어날 때) 자동차가 처음에 생성될 때 생성자를 통해 엔진파워와 색상을 초기화 한다.
setter 사용하기 (자동차가 태어 난 뒤) 기어를 변경하면 기어 상태를 변경할 수 있다. 전진 or 후진 엑셀을 밟으면 속력의 상태를 변경할 수 있다.
엔진 파워와 색상에 대한 setter가 필요한가? setter란 무엇일 까? setter는 오브젝트의 상태 변화가 필요할 때 만드는 것이다.
상속(inheritance)이란 기존으 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미
상속에 목적은 추상화에 있다. 재사용에 있지 않다. 상속의 목적은은 추상화이고, 메소드 혹은 변수의 재사용은 추상화를 했기 때문에 얻어지는 부가적인 효과일 뿐이다. 즉, 재상용을 위해서 상속을 사용하지 않는다.
상속을 하게 될 때 메모리 구조가 어떻게 될까?
다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미
잘 만들어진 동물 클래스가 있다면, 사자 클래스를 만들 때, 동물 클래스를 상속 받아 만들면 편하게 만들 수 있다. 왜냐하면 상속을 하면 부모가 만들어 둔 메소드나, 변수를 재사용 할 수 있기 때문이다.
하지만, 잘 만들어진 엔진 클래스를 자동차가 상속해서 사용하면 안된다. 그 이유는 다형성이 성립하지 않기 때문이다.
다형성을 통해 DIP를 지킬 수 있다.
DIP는 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것에 의존하기 보다는, 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 원칙(Dependency Inverstion Principle)
기존 클래스가 새로운 클래스의 구성요소가 되는 것
오버라이딩(overriding)이란 상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하여 부모의 메소드를 무효화 시키는 것이다.
의존성 역전 원칙: 구체적인 것이 아닌 추상적인 것에 의존한다.
개방 폐쇄의 원칙: 기존 클래스의 코드를 변경하지 않고, 유지보수를 할 수 있다.
싱글톤(Singleton) 패턴의 정의는 단순하다. 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미