OOP란 객체 지향 프로그래밍 이라는 뜻으로,
프로그래밍은 값을 받아 순서대로 처리해서 값을 출력한다 (X)
프로그래밍은 여러 독립적인 부품들의 조합으로, 객체들 사이의 유기적인 협력과 결합이 존재한다는 컴퓨터 프로그래밍의 패러다임입니다.
public class Main { //클래스
static final String dog = "walwal";
public static void main(String[] args) {
Main a; //객체
a = new Main(); //인스턴스
}
}
static
main이 실행되기 전에 메모리에 로드되므로, main에서 관리가 불가능합니다
Heap
new
할때 메모리에 로드됩니다.heap은 자원이 한정적이며, 더이상 사용되지 않을 경우 heap memory에서 자동으로 삭제됩니다. (java의 역할)
static VS heap 결론
main
시작 전에 메모리에 저장하고 싶다면 static을 사용하고,
그렇지 않은경우new
선언으로 heap을 사용합니다.
static 시작 - main 시작 - main끝 - static끝
// 따라서 static의 경우 메모리를 가장 많이 차지합니다.
stack
금방 버려질 값들을 저장합니다 (지역변수)
stack
에 변수를 생성했을 경우, static
으로 옮길 수 없습니다.
heap
메모리에 저장이 되어야 합니다. 객체(object)의 상태는 행위(메서드)에 의해서 변경되어야 합니다.
변수는 private로 설정하며 getter()
와 setter()
가 필요합니다.
setter()
의 경우 상태는 행위(메서드)에 의해 바꿔야 한다 라는 OOP의 제 1원칙에 따라 setter()
라는 이름의 메서드가 아닌, 의미가 담긴 이름 으로 만들어야 합니다.
setter()
함수의 경우 시간의 흐름이 필요한 것 으로,setter()
를 통해 삽입하는것이 아닌, Constructor(생성자)
를 통해서만 값을 제공해야 한다는 의미입니다. ex) Person이라는 객체를 만들 때 "성별"이라는 값은 (시간이 지나더라도) 변경되지 않는 값이므로,
Constructor(생성자)
를 통해 값을 제공합니다.
ex2) Person이라는 객체를 만들 때 "나이"라는 값은 (시간이 지남에 따라) 값이 바뀌므로
setter(의미있는 메서드 이름)
를 통해 값을 제공합니다.
상속이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미합니다.
다형성(IS-A) 이란 하나의 객체가 여러가지 타입을 가질 수 있다는 것을 의미합니다.
컴퍼지션(HAS-A) 이란 기존의 클래스가 새로운 클래스의 구성요소가 되는 것입니다.
오버라이딩이란 상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스로 다지 재정의하여 부모의 메서드를 무효화 시키는 것입니다.
DIP (의존성 역전 원칙)
OCP (개방 폐쇄의 원칙)