프로그래밍/Java 37

클래스 로더 (class loader)

JVM internal 아키텍처 에서 클래스 로더 시스템을 자세하게 그리면 위와 같이 구성되어 있다. 참고 https://hyokeun0419.tistory.com/77 클래스 로더 로딩, 링크, 초기화 순으로 진행된다. 로딩 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 "메소드" 영역에 저장 이 때 메소드 영역에 저장하는 데이터 FQCN(fully qualified class name, 패키지 경로까지 포함된 클래스 이름) , 클래스 | 인터페이스 | 이늄, 메소드와 변수 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 "힙" 영역에 저장 특정 클래스를 읽을 때 최상위 부모에게 먼저 읽어달라는 요청을 한다. (Bootstrap > Extension..

JVM 구조

JVM 구조는 크게 클래스 로더 시스템, 메모리, 실행 엔진 으로 구성되어 있다. 클래스 로더 시스템 컴파일된 .class 파일(byte code) 를 읽고 메모리에 적절하게 배치하는게 클래스 로더가 하는 일이다. 클래스 로더가 하는일은 크게 세 가지로 나누어 볼 수 있다. 로딩, 링크, 초기화 로딩: 클래스 파일에서 byte code 를 읽어오는 과정 링크: 레퍼런스를 연결하는 과정 초기화: static 값들 초기화 및 변수에 할당 메모리 크게 다섯가지 영역으로 나뉘어져 있다. 모두 중요하긴 하지만 하나를 꼽으라면, 메소드 영역을 더 유심히 볼 필요가 있다. 메소드 영역에는 클래스 수준의 정보 (클래스 이름, 부모 클래스 이름, 메소드, 변수) 를 저장한다. 그리고 공유자원이다. 즉 다른 영역에서도 참..

JDK, JRE, JVM 이해하기

JVM (Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드 (.class file) 를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행한다. 바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 벤더가 구현한 JVM)이다. JVM 벤더: 오라클, 아마존 등 특정 플랫폼에 종속적이다. .java 파일을 컴파일하면 .class 파일이 생성되는데 해당 파일은 바이트 코드로 이루어져 있다. 이후 바이트 코드(.class 파일)를 인터프리터와 JIT 컴파일러를 사용하여 해당 OS에 맞는 기계어로 변경한 후 실행되게 된다. (OS에 의존적이기 때문에 특정 플랫폼에 종속적인 것이다.) 이 외에도 JVM 은 메모리 관리의 역할도 가지고 있다. 여러 밴더에 따라 ..

Java 8 Funtional 스터디

https://blog.hyper-link.kr/2020/01/23/java8-functinal-tutorial/#Introduction Java 8 Functional Tutorial Java 8 Functinal Programming Tutorial. Java 8 은 Lambda 표현식과 Stream API 를 이용하여 Functinal 프로그래밍을 지원한다.이 튜토리얼에서 사전에 정의된 Functional interfaces와 Collctions API 그리고 Stream API를 통해Jav blog.hyper-link.kr 추석 전 토요일 날 모여 스터디원 분들과 자바 8 함수형 프로그래밍 튜토리얼 학습을 진행하였다. 학습내용 정리는 추후 업데이트 예정!

Inner class 정리

Inner class 란? 클래스 안에 클래스를 선언하여 사용하는것이 Inner class (내부 클래스) 이다. 인스턴스 내부 클래스, Static 내부클래스, 지역 내부 클래스 세 종류가 있으며, 인스턴스, Static, 지역변수의 개념과 동일하다고 생각하면 쉽다. 내부 클래스에서 외부 클래스의 멤버를 객체 생성없이 접근 가능하며, 내부 클래스에서는 모든 접근제어자를 사용할 수 있다. (일반 클래스는 public 과 default 만 사용 가능) 인스턴스 내부 클래스와 지역 내부 클래스에서는 static 변수를 선언할 수 없지만 final static 은 상수이미르로 사용이 가능하다. Inner class vs Static Inner class class A { int value = 5; class ..

Interface

인터페이스는 약속된 행위를 하도록 정의 한 후 실제 내부를 어떻게 구현할지는 각 Implements 에 따라 따로따로 만들 수 있게 하는 것이 인터페이스이다. 실제 다형성을 구현할 때 인터페이스를 많이 사용하게 된다. Implements 가 많아서 그것을 인터페이스 하나로 정의하여 사용하고 싶거나, 해당 소스코드가 라이브러리가 되어 외부사람한테 제공할 때 유용하게 쓰일 수 있다. (* 다형성 : 실제 오브젝트의 형태는 하나인데, 거기서 함수를 호출했을때 각 구현에 따라 그 행태가 달라지는 것 ) 단점은 코드가 읽기 어려워지고, 디버깅이 어렵다. 비지니스 요구가 계속 바뀌는 업종일 경우 인터페이스를 무작위로 추가하게되면 Implements 와 인터페이스 두 개다 계속해서 바꿔야 하는 상황이 와서 불편하다...

StringBuilder

1. StringBuilder 란 StringBuilder Class represents a mutable string of characters. StringBuilder 클래스는 문자의 가변 문자열을 나타냅니다. 2. String vs StringBuilder 비교 String 의 경우 불변(immutable) 이기 때문에 문자열을 계속해서 추가할 경우 (이어 붙이는 경우) 기존의 문자열과 새로운 문자열을 합한 만큼의 새로운 크기의 문자열을 생성하고, 기존 문자열과 새로운 문자열들을 한자 한자 씩 가져다 복사하는 비효율적인 방법을 사용하고 있다. String joinWords (String[] words) { String sentence = ""; for (String w : words) { sente..