JAVA,객체지향

JAVA기본 메모리 운영

25G 2021. 7. 15. 17:51

메모리에 올라갔다는 것은 사용할 수 있다는 뜻이다.

메모리에는 크게 세가지 영역이 있다 static, hip, stack 영역이 있다.

 

. java파일을 컴파일할 때는 os가 아닌 jvm이 이해할 수 있는 데이터로 컴파일해준다.
jvm만 운영체제에 맞춰주면 되는 것이다.

jvm이 하는 일
1. 제일 먼저. class파일 로드한다
2. 모든 class파일 중에 static이라고 적혀있는 것들을 다 찾아서 메모리에 올려놓는다. 이 메모리 공간이 static공간이라고.
3. 이때 각 클래스마다 방을 나눠서 static공간에 둔다. 그래서 최초에 한번 static 하나만 띄울 수 있다.
4. new연산자를 사용하면 그 클래스에 static이 아닌 것만 다 올려준다. 개발자가 메모리에 직접 올릴 수 있다는 뜻.
5. 힙 영역은 내가 원할 때 메모리에 띄우고 싶어서 만든 공간.
6. 스택은 생명주기가 제일 짧음 메모리에 잠깐 떴다가 사라진다. 그 로직이 실행되는 최소한의 공간 안에서만 존재한다. (지역 번수들)
이 프로그램의 처음부터 끝까지 메모리에 두고 공유하고 컨트롤하고 싶을 때 static 영역 개발자가 제어할 수 없다.
내가 원하는 순간에 띄우고 계속 메모리에 살려놓고 싶다 hip 영역
잠깐 사용하고 버리고 싶다 stack 영역

자바스크립트는 stack영역과 hip영역 밖에 없다 변수만 작성하면 메모리에 올라가기 때문이다.

 

싱글톤 패턴

싱글톤 패턴은 자바에서 세 가지 메모리 영역을 이해했다면 쉽게 이해할 수 있다.

예를 들어서 롤에서 바론은 한 번에 두 마리가 나오면 안 된다. 이럴 때 적용해야 하는 것이 싱글톤 패턴이다. 그래서 객체를 막 생성할 수 없도록 객체를 하나로 제한하는 것. 그래서 private생성자를 만들고 static영역에 new객체를 띄어놓은 것이다. 그럼 static에 띄어진 객채를 통해서만 사용할 수 있기때문에 new연산자를 사용할수 없게 되면서 바론이 한 마리만 유지되도록 프로그래밍을 할 수 있는 것이다

 

함수를 오버라이드 하는 목적은 제사용이 아닌 부모의 메서드를 무효화시키고 자식 메서드를 사용하는 기능이다.

 

오버 로딩의 한계는 오버 로딩할 경우의수가 너무 많으면 오버로딩할 함수가 너무 많아지는 데에 있다.

위와 같은 경우에 추상화를 잘하면 타입을 일치시킬 수 있다. 타입을 일치시켰다는 것은 경우의 수를 줄일 수 있다는 것 그럼 추상화를 하다 보면 하나의 객체의 타입이 여러 개가 생긴다(Ex사자는 동물이기도 하고 사자이기도 하고 포유류이기도 하다). 그럼 그렇게 여러 개의 타입이 생긴 것을 다형성이라고 한다. 타입을 상황에 따라서 변동할 수 있는 객체이기 때문이다.

 

그럼 위와 같이 여러 개의 타입이 생긴 객체끼리의 타입을 맞춰주는 것이 캐스팅이다.