JAVA

JAVA 컴파일, JAVA 역사, Garbage Collection, OOP, value type, stack and heap

댕칠이 2024. 11. 4. 16:53

JVM 

.java -> 컴파일 -> .class (생성) 

.class 파일이 byte 코드이며, jvm에서 실행될 수 있다. 

.class 파일만 있으면 OS에 제약없이 실행할 수 있다. 

JRE = JVM + Java class Library 

JDK = JRE + 개발 툴

https://inpa.tistory.com/entry/JAVA-%E2%98%95-JDK-JRE-JVM-%EA%B0%9C%EB%85%90-%EA%B5%AC%EC%84%B1-%EC%9B%90%EB%A6%AC-%F0%9F%92%AF-%EC%99%84%EB%B2%BD-%EC%B4%9D%EC%A0%95%EB%A6%AC

 

JAVA는 compile 언어이기 때문에 오류 처리에 능하다. 

 

현재 표준출력이 console로 설정되어 있기 때문에 console에 출력된다. `

 

.java 파일은 모두 class 또는 interface 로 묶여야 한다. 

 

JAVA 역사

인공어(중간자 역할을 하는 언어)를 착안하여 JVM이 탄생했다. 

JVM처럼, 브라우저 위에서 자바 코드가 동작할 수 있도록 applet 을 올렸다.

이종의 네트워크가 인터넷으로 통합되어 파일(HTML)만 송수신 하다가, java가 애니메이션을 웹브라우저 위에 올렸다.

- 애플릿을 포함하는 HTML 페이지를 보려면 Java 작동 가능 브라우저를 사용할 때, 애플릿의 코드는 사용자의 시스템으로 전송되고 브라우저의 JVM(Java Virtual Machine)에서 실행됩니다. - 

 Java 애플릿 태그를 포함하는 HTML 문서가 표시될 때, Java 작동 가능 웹 브라우저는 인터넷에서 Java 바이트코드를 다운로드하고 웹 문서에서 코드를 처리하기 위해 JVM(Java Virtual Machine)을 사용합니다. 이 Java 애플릿은 웹 페이지가 애니메이션 그래픽이나 대화식 컨텐츠를 포함할 수 있도록 하는 것입니다.

https://www.ibm.com/docs/ko/i/7.3?topic=platform-java-applets-applications

 

Garbage Collection

 - 자바는 처음부터 Garbage Collection 을 설계 했다.

자바는 백색 가전을 연결하고자 했다. (현재의 IoT) 여러 가전에서 메모리를 유동적으로 관리할 수 없으니, Garbage Collctor 를 고안했다. 

 

WAS 를 실행할 때, 톰캣이 JVM를 실행한다. (톰캣 안에 main 메서드 등... 모든 정보가 들어감)

톰캣이 만들어진 .class 파일을 모두 읽고 메모리에 올린다. 

 

절차적 프로그래밍 구조적 프로그래밍 

 - 옛날에 컴퓨터의 역할을 빠른 연산 이었다. 이러한 연산을 여러 컴퓨터에서 나누어 하고, 하나로 합치는 방식을 기대했지만, 잘 되지 않았고, 이러한 작은 컴퓨터는 microsoft 사에서 인수하여 퍼스널컴퓨터로 발전하게 된다. 

 

절차적 프로그래밍으로는 "사람"을 대상으로 하는 프로그래밍에는 적합하지 않았다. 

인산 사회는 복잡성이 있다. (메뉴얼, ...)

그렇기 때문에 실제 세계를 모방한 OOP가 등장하게 되었다. 

커다란 문제는 개별적으로 쪼개서 하나로 만든다. 각자 따로 따로 자신의 문제를 가지면서 명확해진다. 

 

OOP

1. 추상화 (abstraction) - 서로 다른 것들로부터 공통적인 부분을 찾아내는 것, 관심사에 따라서 정보를 더 추출해내는 것

2. 캡슐화 (encapsulation) - java는 오브젝트의 상태정보나 기능을 정책에 따라 외부에 노출할 지 하지 않을 지 결정할 수 있다.  

3. 다형성 (polymorphism) 

- 오버로딩 : 같은 이름 메서드를 여러개 가지면서 매개변수의 유형과 개수를 다르게 함

- 오버라이딩: 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의 

4. 상속 (inheritance) - 재사용성 ^ , A와 비슷한 B를 만들 때, copy&paste 하지 않고 A를 그대로 상속해서 B를 만드는 것 

is-a 관계 : 상속은  A가 가지고 있는 것들을 전부 B가 가진다. (A = B)

has-a 관계: 필요에 따라 참조관계를 갖는 것. ..

 

type은 사용하는 메모리와 cpu의 처리 단위를 미리 정해두는 것. 

1. 데이터의 타입을 미리 정의해서 메모리를 사용하는 경우

2. 데이터를 보고 메모리를 준비하는 경우

-> 안정적인 프로그래밍이 가능

 

primitive type 

숫자, 문자, 소수점, 참/ 거짓 등의 기본적인 data 표현

memory size 

stack 영역에 그대로 값을 저장한다. 

primitive type은 사이즈가 정적이기 때문에 stack 메모리 영역에 저장할 수 있다.

->고정적인 크기의 메모리 공간을 할당받는다. 

 

reference type

가변적인 사이즈의 데이터를 처리하기 위함

heap 영역에 new로 만드는 객체를 저장한다. 

stack에는 객체의 주소값을 저장해 두고, heap 영역에서 해당 객체를 찾는다. 

 

stack                heap

i  10   

s  0x1000         "hello" ( 0x1000)

s.length 를 하면 stack의 s 주소를 참조하여 heap에서 객체를 참조하여 length 메소드를 실행한다. 

 

가변적인 데이터, 복잡한 데이터를 표현한다.