일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스택메모리
- 의존성 역전 원칙
- 객체지향
- Data Structure
- 단일책임원칙
- Execution Engine
- Single Responsibillity Principle
- Native Method Stack
- Java
- stack메모리
- Runtime data Area
- 객체지향 설계 5원칙
- Heap
- solid
- pc register
- 실행 엔진
- Spring SOLID
- 자바
- CS
- 단일 책임 원칙
- Spring
- 스택
- 자료구조
- 개방폐쇄원칙
- 자바 heap
- 개방-폐쇄 원칙
- JVM
- Class Loader
- Stack
- Open Closed Principle
- Today
- Total
목록전체 글 (20)
Juuunew 살아남기
실행 엔진이란? 실행엔진은 메모리에 적재된 클래스(바이트 코드)들을 기계어로 변경하여 명령어 단위로 실행한다. 바이트 코드를 운영체제에 맞게 해석해주는 역할을 수행하며 크게 두 가지 방식을 사용한다. 인터프리터 (Interpreter) JIT (Just In Time) 인터프리터 (Interpreter) 바이트 코드 명령어를 하나씩 읽어서 해석하고 바로 실행한다. 바이트 코드 한 줄씩 읽고 실행하는데 중복되는 바이트 코드들에 대해서도 매번 컴파일 하게되어 속도가 느리다는 단점이 있다. 따라서 중복되는 바이트 코드에 대해서는 JIT 컴파일러를 사용한다. JIT (Just In Time) 인터프리터의 속도 문제를 해결하기 위해 생겨난 기능이며, 인터프리터로 먼저 컴파일을 하다가 반복되는 코드를 발견하면 JI..
클래스 로더는 JVM 내로 컴파일된 자바 코드(.class)를 동적으로 로드하고, 링크를 통해 레퍼런스를 연결하는 과정을 거치고 static 값들 초기화 및 변수에 할당 후 JVM의 메모리 영역인 Runtime Data Area에 배치한다. 클래스를 메모리에 올리는 로딩 기능은 한번에 메모리에 올리지 않고, 어플리케이션에서 필요한 경우에 동적으로 메모리에 적재한다. 클래스 로더는 3단계로 진행된다. 로딩 -> 링크 -> 초기화 로딩 (Loading) : 자바 바이트 코드( .class )를 메소드 영역에 저장한다. 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 "힙(Heap)" 영역에 저장. Bootstrap : JAVA_HOME/lib에 있는 코어 자바 API를 제공한다. (최상위 우선순..
JVM ? Java Virtual Machine의 줄임말로 자바 프로그램 실행환경을 만들어주는 소프트웨어이다. JVM은 Java Application이 OS에 상관없이 실행할 수 있게 해준다. (플랫폼으로부터 독립적이게 만들어 줌) 🌟 자바 바이트 코드 ( .class )를 OS에 맞는 코드로 변환하여 실행해주는 역할. 자바 어플리케이션의 실행과정 자바 어플리케이션 실행 JVM이 OS로부터 메모리를 할당받음 ( JVM은 할당받은 메모리를 용도에 따라 영역을 구분하여 관리 ) 자바 컴파일러 ( javac )가 자바 소스코드( .java )를 읽어 바이트 코드( .class )로 변환 클래스 로더를 통해 변환된 바이트 코드를 JVM으로 로딩 로딩된 바이트 코드는 실행 엔진을 통해 해석됨 해석된 바이트 코드는..
자바 프로그램이 실행되면서 동적으로 생성된 객체가 저장되는 공간이다. 모든 Object 타입의 데이터가 할당됨 Heap 영역의 Object를 가르키는 참조변수가 Stack에 할당 생명주기가 김 생명 주기에 따라 Young Generation(짧음)과 Old Generation(김)으로 나뉘어진다. (추후 공부예정) 쉽게 말해 new 연산자로 생성된 객체 또는 인스턴스가 저장되는 공간이라고 생각하면 편하다. age는 원시타입 int를 타입으로 가지고있어 Stack 영역에 값이 함께 저장되어지고, Object를 상속받아 구현된 String 객체의 값은 Heap 영역에 생성되게 된다. Stack 영역에 생성된 name 변수는 Heap 영역에 있는 String 주소값을 참조하게 된다. 조금 더 나아가서 name..
Stack 메모리 함수나 메서드의 지역 변수(local variable)와 매개 변수(parameter)가 저장된다. 함수나 메서드가 호출될 때마다 스택 프레임이 스택 메모리 안에 쌓인다. Heap 영역에 생성된 Object 타입 데이터의 참조값이 할당 primitive type(원시타입)의 데이터가 값과 함께 할당 boolean, char, short, int, long, float, double 하나의 Thread 당 하나의 Stack을 가짐 (각 Thread에서 다른 Thread의 Stack 영역에 접근 불가 🌟 스택 프레임 하나의 메서드를 호출하는데 필요한 메모리 덩어리 메서드 하나 당 하나의 스택 프레임이 존재 메서드를 호출하기 직전 스택 프레임을 자바 Stack 메모리에 생성한 후 메서드를 호..
스프링 컨테이너 Spring Framework는 스프링 컨테이너를 통해 객체(Bean)들을 관리한다. Spring Framework에서 Bean은 객체를 말한다. ApplicationContext 인터페이스를 스프링 컨테이너라 한다. BeanFactory 인터페이스를 상속받은 하위 인터페이스 BeanFactory가 제공하는 기능 외 자원 처리 추상화, 메시지 및 국제화와 이벤트 지원 등을 제공 XML 기반 방식과 어노테이션 기반의 자바 설정 클래스로 생성가능. 어노테이션 기반을 살펴보면 Controller - @Controller, @RestController Service - @Service Repository - @Repository 해당 어노테이션들의 내부를 타고 들어가다 보면, @Component..
의존성 역전 원칙 - DIP 프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안된다." 쉽게 이야기해서 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻 역할과 구현을 철저하게 분리할 것. 쉽게 예를 들면 현대의 소나타, 아반떼, 싼타페 들은 자동차의 모델명이다. 그럼 여기서 자동차는 인터페이스가 될 것이고 소나타, 아반떼, 싼타페 등 모델들은 자동차 라는 인터페이스를 구현한 클래스 라고 볼 수 있다. 계속 예제로 사용하였던 서비스센터의 코드를 다시 한번 보자. public class User { private final Laptop needRepair; public User(Laptop needRepair) { this.needRepair = needRepair; } } // Service..
인터페이스 분리 원칙 - ISP 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. 인터페이스가 명확해지고, 대체 가능성이 높아진다. 분리하면 정비 인터페이스 자체가 변경되어도 운전자 클라이언트에 영향을 주지 않음 클라이언트의 관심사에 따라 알맞게 인터페이스를 분리해주어야 하는 인터페이스 분리 원칙은 어떻게 보면 단일 책임 원칙과 상당히 유사하다고 생각된다. 단일 책임 원칙과 개방-폐쇄 원칙에서 예시로 들었던 서비스 센터를 다시 한번 예시로 들어보려 한다. public interface ServiceCenter { /** * 노트북 */ // 키보드 void keyboard(); // 모니터 void monitor(); // 트랙패드 void trackpad(); /** * 스마..