일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- HeapArea
- javac
- 바이트코드
- pg_hba.conf
- RDD
- jdk
- 도커네트워크
- 상속관계
- StackArea
- generics
- Operating System
- SRP
- 운영체제
- 라피신
- MethodArea
- 42seoul
- la-piscine
- LSP
- abstract
- 42서울
- Compiler
- java
- 제네릭스
- 참조변수
- JVM
- classloader
- JIT
- 이노베이션아카데미
- 자바컴파일러
- 포함관계
- Today
- Total
목록CS/java (12)
while(1) 작심삼일();

직전 포스팅에 이어서 JVM을 조금 더 자세히 설명하자면 JVM은 1. .class파일(바이트코드)을 ClassLoader를 통해 동적으로 클래스를 Runtime Data Area의 Method Area에 로드한다. 2. Execution Engine이 바이트코드를 두 가지 방식을 이용하여 읽는다. 2.1. 인터프리터 방식 : 한줄씩 해석, 실행하는 방식으로 속도가 느림 2.2. JIT 컴파일러 : 프로그램을 실행하는 시점(바이트코드 실행시점)에 각 OS에 맞는 Native Code로 변환하여 읽는다. 매번 같은 코드를 해석하지 않고 캐싱을 하기 때문에 바뀐부분에 대해서만 컴파일을 한다. 속도는 빠르나 비용이 소요되기 때문에 인터프리터 방식으로 진행을 하다 특정 기준이 넘어가면 JIT 컴파일러를 사용한다..

JDK(Java Development Kit) 자바 개발 키트를 의미한다. JRE + 개발을 위해 필요한 컴파일러(javadoc, jar, javap, javac) 등이 포함되어 있다. JRE(Java Runtime Environment) 컴파일된 자바 프로그램을 실행시키는 자바 환경을 의미한다. JVM이 자바 프로그램을 실행시킬 때 필요한 라이브러리와 파일을 가지고 있다. 자바 실행을 위해서는 필수적이고, 개발을 하려면 JDK가 필요하다. JVM(Java Virtual Machine) .java 소스코드로부터 컴파일된 .class 바이너리 파일을 실행시킬 수 있다. 자바로 작성된 모든 애플리케이션은 JVM 위에서 작동된다. 다른 언어와 다르게 자바 애플리케이션은 JVM이랑 만 상호작용을 하기 때문에 O..
static : '공통적인' 이라는 의미를 가지며, 인스턴스에 관계없이 같은 값을 갖는다. static 메서드와 인스턴스 메서드의 중요한 차이는 인스턴스 멤버 사용여부에 있다. method area에 로드되기 때문에 인스턴스가 생성되지 않아도 사용할 수 있다. final : '변경될 수 없는' 이라는 의미를 가지며, 변수에 사용되면 변경이 불가능한 상수가 되고 메서드에 사용되면 오버라이딩을 할 수 없고, 클래스에 사용되면 자신을 다른 클래스에 상속시킬 수 없게 된다. 대개 선언과 초기화를 같이 하지만, 인스턴스 변수의 경우에는 생성자에서 초기화를 시킬 수도 있다. abstract : '미완성' 이라는 의미를 가지며, 클래스에 사용되면, 내에 추상 메서드가 선언되어 있음을 의미하고, 메서드에 사용되면, 선..
멤버, 클래스, 메서드, 생성자에 사용되어 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록(캡슐화) 제한하는 역할을 함. private : 같은 클래스 내에서만 접근 가능 default : 같은 패키지 내에서만 접근 가능 protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능 public : 접근 제한이 전혀 없다. 접근 범위 : private
객체지향의 목적은 사용자의 요구를 만족시킬 수 있는 기능을 제공함과 동시에 이해하기 쉽고, 단순하며, 유연한 상호작용을 제공하는 객체들의 공동체를 구축하는 것이다. 이에 따라 객체지향의 설계는 애플리케이션의 기능을 구현하기 위한 협력 관계를 고안하고, 협력에 필요한 역할과 책임을 식별한 후 이를 수행할 수 있는 적절한 객체를 식별해 나가는 과정이다 => 올바른 책임을 올바른 객체에게 할당한다. 책임-주도 설계 시스템의 기능은 더 작은 규모의 책임으로 분할되고, 각 책임은 책임을 수행할 적절한 객체에게 할당된다. 객체가 책임을 수행하는 도중에 스스로 처리할 수 없는 정보나 기능이 필요한 경우 적절한 객체를 찾아 필요한 작업을 요청한다. 요청된 작업을 수행하는 일은 이제 작업을 위임받은 객체의 책임으로 변환..

SRP : 단일 책임 원칙 (Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야 한다. 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것 (ex. UI 변경, 객체의 생성과 사용을 분리) OCP : 개방-폐쇄 원칙 (Open/Closed Principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 다형성을 통해 구현 객체를 변경하면 클라이언트 코드를 변경이 필요하고 그렇게 되면 OCP 원칙이 깨지기 때문에 원칙을 지키기 위해선 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다. LSP : 리스코프 치환 원칙 (Liskov Substitutio..