TIL

항해99_WIL220522 (객체지향 프로그래밍, JVM)

Hyeongjun_Ham 2022. 5. 22. 15:06

알고리즘을 한 두어주 전에 한거 같은데 3일전에도 하고있었다는게 말이안된다.

1주일간 한거 보면서 그 때 뭐했나 생각도 나고 좋았다

 

- 객체지향 프로그래밍

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

 

- 장점

- 코드 재사용이 용이

남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있다.

 

- 유지보수가 쉬움

절차 지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정해야하는 반면,

객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다. 

 

- 대형 프로젝트에 적합

클래스 단위로 모듈화시켜서 개발할 수 있으므로 대형 프로젝트처럼 여러 명, 여러 회사에서 프로젝트를 개발할 때 업무 분담하기 쉽다.

 

- 단점

처리 속도가 상대적으로 느림

객체가 많으면 용량이 커질 수 있음

설계시 많은 시간과 노력이 필요

 

- 핵심개념

- 추상화(abstract)

복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.

이렇게 줄여서 뽑아낸 공통적인 특징들은 크게 속성(attribute)행위(behavior)로 나뉘게 되는데,

이것들을 관련있는 것들끼리 묶어놓은 것을 캡슐화(encapsulation)라고 한다.

 

- 캡슐화(encapsulation)

객체의 필드(속성), 메소드를 하나로 묶고, 실제 구현 내용을 외부에 감추는 것을 말한다. (정보 은닉)

외부 객체는 객체 내부의 구조를 얻지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있다.

필드와 메소드를 캡슐화하여 보호하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는데 있다.

자바 언어는 캡슐화된 멤버를 노출시킬 것인지 숨길 것인지를 결정하기 위해 접근 제한자(Access Modifier)를 사용한다.

 

- 상속(inheritance)

자식 클래스가 부모클래스의 멤버를 물려받는 것

따라서 코드의 재사용성이 향상된다.

유지보수의 편리성을 제공.

객체의 다형성을 구현할 수 있다.

 

- 다형성(polymorphism)

다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.

- 특징 

하나의 부모타입이 여러 자식타입을 가질 수 있다.

유연하고 변경에 용이

확장성이 뛰어나다.

객체지향의 꽃이라고 할 수 있다.

 

출처: https://jeong-pro.tistory.com/95

 

객체 지향 프로그래밍이 뭔가요? (꼬리에 꼬리를 무는 질문 1순위, 그놈의 OOP)

객체 지향 프로그래밍(Object Oriented Programming) 여러 소프트웨어 관련 IT기업 신입사원 기술면접에서 면접자들 긴장을 풀어줄 겸 워밍업으로 자주 나오는 질문이다. "객체 지향 프로그래밍에 대해

jeong-pro.tistory.com

 

- JVM(Java Virtual Machine)자바 가상 머신

컴퓨터에서 Java 프로그램과 Java 바이트코드 로 컴파일되는 다른 언어로 작성된 프로그램 을 실행할 수 있게 해주는 가상 머신이다.

 

- JVM에는 2가지 기본 기능이 있다.

1. 자바 프로그램이 어느 기기, 또는 어느 운영체제 상에서도 실행될 수 있게 하는 것

("한 번 작성해, 어디에서나 실행한다"는 유명한 원칙이다)

2. 프로그램 메모리를 관리하고 최적화하는 것

 

- 자바 프로그램 동작과정

 

  1. 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받는다. 위에 언급했던 메모리 구조에 따라 영역을 나누어 관리한다.
  2. 자바컴파일러가 자바 소스코드를 읽어들어 자바 바이트코드(.class)로 변환시킨다.
  3. Class Loader를 통해 class파일들을 JVM으로 로딩한다.
  4. 로딩된 class파일들은 Execution engine을 통해 해석된다.
  5. 해석된 바이트코드는 Runtime Data Area에 배치되어 실질적인 수행이 이루어지게 된다. 
  6. 위의 실행과정 속에서 JVM은 필요에 따라 Thread Synchronization, GC같은 관리 작업을 수행한다.

출처 : https://asfirstalways.tistory.com/158

 

#자바가상머신, JVM(Java Virtual Machine)이란 무엇인가?

#JVM이란? JVM이란 JAVA Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다 (가상머신이란 프로그램의 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것이다.) JV

asfirstalways.tistory.com

 

JVM의 구조는 크게 보면,

Garbage Collector,

Execution Engine,

Class Loader,

Runtime Data Area로 4가지로 나눌 수 있다.

 

위에서 설명하였듯이, 자바 소스 파일은 자바 컴파일러에 의해서 바이트 코드 형태인 클래스 파일이 된다.

그리고 이 클래스 파일은 클래스 로더가 읽어들이면서 JVM이 수행된다.

 

(1) Class Loader

JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다.

런타임 시에 동적으로 클래스를 로드한다.

 

(2) Execution Engine

클래스 로더를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드들을 명렁어 단위로 읽어서 실행한다.

최초 JVM이 나왔을 당시에는 인터프리터 방식이었기때문에 속도가 느리다는 단점이 있었지만 JIT 컴파일러 방식을 통해 이 점을 보완하였다.

JIT는 바이트 코드를 어셈블러 같은 네이티브 코드로 바꿈으로써 실행이 빠르지만 역시 변환하는데 비용이 발생했다.

이 같은 이유로 JVM은 모든 코드를 JIT 컴파일러 방식으로 실행하지 않고, 인터프리터 방식을 사용하다가 일정한 기준이 넘어가면 JIT 컴파일러 방식으로 실행한다.

 

 

(3) Garbage Collector

Garbage Collector(GC)는 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 한다. 이때, GC가 역할을 하는 시간은 언제인지 정확히 알 수 없다.

 

 

(4) Runtime Data Area

JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.

이 영역은 크게

Method Area,

Heap Area,

Stack Area,

PC Register,

Native Method Stack로 나눌 수 있다.



 

 

1. Method area 

모든 쓰레드가 공유하는 메모리 영역이다.

메소드 영역은 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드를 보관한다.

 

 

2. Heap area

모든 쓰레드가 공유하며, new 키워드로 생성된 객체와 배열이 생성되는 영역이다.

메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역이다.

 

 

3. Stack area 

 

 

메서드 호출 시마다 각각의 스택 프레임(그 메서드만을 위한 공간)이 생성된다.

그리고 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장한다.

마지막으로, 메서드 수행이 끝나면 프레임별로 삭제한다.

 

 

4. PC Register

쓰레드가 시작될 때 생성되며, 생성될 때마다 생성되는 공간으로 쓰레드마다 하나씩 존재한다.

쓰레드가 어떤 부분을 무슨 명령으로 실행해야할 지에 대한 기록을 하는 부분으로,

현재 수행중인 JVM 명령의 주소를 갖는다.

 

 

5. Native method stack

자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다.

 

출처 : https://steady-coding.tistory.com/305

 

JVM 메모리 구조란? (JAVA)

안녕하세요? 코딩 중독입니다. 오늘은 JVM 메모리 구조에 대해 알아보겠습니다. JVM이란? JVM 메모리 구조를 설명하기 전에 JVM이 무엇인지 알아야 합니다. JVM은 Java Virtual Machine의 약자로, 자바 가상

steady-coding.tistory.com

 

- 쓰레드(thread)

어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.

일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다.

 

- 내일할 일

- cs스터디 발표준비

- spring 개인과제 html완성

- spring 강의들으며 mvc모델 개념 더 잘 알아보기