Java 18

JVM에 대해 알아보자!

지난 포스팅 중에 자바 컴파일 과정에 대해 알아보았습니다. 자바 컴파일러에 의해 변환된 .class파일 (바이트 코드)이 클래스 로더에 의해 JVM 내에 들어와 메모리 공간을 만들어주고 컴퓨터가 이해할 수 있는 기계어로 만들어준다고 했습니다. 결국엔, JVM 안에서 메모리도 만들고, 기계어로 변환도 해주고 여러 역할을 수행하게 됩니다. 그래서 JVM이 무엇이냐? Java Virtual Machine의 약자로서, 자바 바이트코드를 실행할 수 있는 주체입니다. 일반적으로 인터프리터나 JIT 컴파일 방식으로 다른 컴퓨터 위에서 바이트코드를 실행할 수 있도록 구현됩니다. 출처 : 위키백과 쉽게 말해서, JVM은 우리들이 작성한 자바 프로그램이 수행되는 프로세스를 의미합니다. 다시 말해서, java라는 명령어를 ..

Java 2021.08.11

자바의 컴파일 과정을 이해해보자

자바의 호환성 자바의 컴파일 과정을 알기 전에, 우선 자바의 장점 한가지를 다루고 시작하겠습니다. 자바는 C언어와 다르게 각 OS별 컴파일러 없이 하나의 컴파일러로 모든 OS를 지원하는 특징을 가지고 있습니다. 예를 들어, C언어로 소스를 짜고 맥OS에 실행시키려면 맥용 C컴파일러가 필요하고 윈도우OS에 실행시키려면 윈도우용 C컴파일러가 필요한거죠. 물론, 이전 기종 마다 소스 파일을 짜야했던 어셈블리어와 기계어에 비하면 C언어는 소스 파일 하나만 짜면 되는 편리함을 가지고 있습니다. C언어는 One Source Multi Object Use Anywhere의 모토를 가지고 있죠. 하나의 소스로 각 기기에 맞는 목적 파일을 만들어 어디든 사용 가능하다. 하지만, 자바는 Write Once Use Anyw..

Java 2021.07.30

[JAVA] 15. JIT(Just In time)

JIT (Just-In-Time) 컴퓨터 프로그래밍을 실행하는 두 가지 방식인 인터프리트 방식과 정적 컴파일 방식을 혼합한 것. 인터프리트 방식 : 프로그램을 실행할 때마다 컴퓨터가 알아 들을 수 있는 언어로 변환하는 작업을 수행함. 간편하지만 성능이 매우 느림 정적 컴파일 방식 : 실행하기 전에 컴퓨터가 알아 들을 수 있는 언어로 변환하는 작업을 미리 실행함. 변환 작업은 딱 한 번만 수행하므로 속도가 빠름. 따라서, JIT의 변환 작업은 인터프리터에 의해서 지속적으로 수행되지만, 필요한 코드의 정보는 캐시에 담아두었다가(메모리에 올려두었다가) 재사용하게 된다. "분명히 나는 javac 명령어를 통해 컴파일을 했는데, 그럼 그냥 정적 컴파일 방식이 아닌가?" : javac라는 명령어를 통해 컴파일을 하..

Java 2021.05.18

[JAVA] 중간 점검

1. 참조 자료형(Reference type)과 기본 자료형(Primitive type)의 차이를 정리해 주세요. 참조 자료형은 내가 마음대로 만들 수 있지만, 기본 자료형은 정해져 있다. 기본 자료형 : byte, short, int, long, char, float, double, boolean 참조 자료형 : 기본 자료형을 제외한 나머지 타입 모두를 말함. Calculator, Car 클래스 등등 byte형을 왜 만들었을까? (-128 객체 생성 } } 번외) 생성자가 없더라도 객체를 얻을 수 있는 클래스가 존재한다. 4. Overloading은 무엇인가요? public void setData(int a)라는 메소드를 원하시는 대로 Overloading 해주세요. 메소드를 생성자처럼 이름만 같고 매..

Java 2021.05.17

[JAVA] 14. Function Interface

Function Interface란? 함수를 일급 객체로 사용할 수 없는 자바 언어의 단점을 보완하기 위해 도입되었습니다. 위 덕분에 자바는 전보다 간결한 표현이 가능해졌으며, 가독성이 높아지게 되었습니다. 일반적으로, 구현해야 할 추상 메서드가 하나만 정의된 인터페이스를 가리킴. "Java Language Specification의 설명" A functional interface is an interface that has just one abstract method (aside from the methods of Object), and thus represents a single function contract. Functional Interface는 (Object 클래스의 메소드를 제외하고) 단 하..

Java 2021.05.11

[JAVA] 13. 쓰레드(Thread)

쓰레드는 언제 수행 되는가? java 명령어를 사용하여 클래스를 실행시키는 순간 자바 프로세스가 시작되고, main() 메소드가 수행되면서 하나의 쓰레드가 시작된다. ※아무런 쓰레드를 생성하지 않아도, JVM을 관리하기 위한 여러 쓰레드가 존재한다. 예를 들면 자바의 쓰레기 객체를 청소하는 GC 관련 쓰레드처럼 말이다. 쓰레드는 왜 만들었을까? 프로세스가 하나 시작하려면 많은 자원이 필요함. 만약 하나의 작업을 동시에 수행하려고 할 때 여러 개의 프로세스를 띄워서 실행하면 각각 메모리를 할당해야 함. JVM은 기본적으로 적어도 32MB~64MB의 물리 메모리를 점유함. 그에 반해, 쓰레드를 하나 추가하면 1MB 이내의 메모리를 점유함. (쓰레드 == 경량프로세스) 쓰레드는 어떻게 생성하는가? 크게 두 가..

Java 2021.05.04

[JAVA] 12. 자바 컬렉션(Map편)

Map의 개념은 다른 컬렉션보다 간단하다. Map에 데이터를 넣는 put() 데이터를 확인하는 get() 데이터를 삭제하는 remove() Map 인터페이스를 구현한 클래스들 HashMap, TreeMap, LinkedHashMap, Hashtable 기능 HashMap HashTable 키나 값에 null 저장 가능 여부 가능 불가능 여러 쓰레드 안전 여부 불가능 가능 따라서, Hashtable을 제외한 Map으로 끝나는 클래스들을 여러 쓰레드에서 동시에 접근할 땐 Map m = Collections.synchronizedMap(new HashMap(...)); 와 같이 선언해서 사용해야 한다. HashMap 클래스의 상속 관계 java.lang.Object ㄴ java.util.AbstractMap ..

Java 2021.04.30

[JAVA] 11. 자바 컬렉션(Set과 Queue편)

Set은 순서에 상관 없이, 어떤 데이터가 존재하는지를 확인하기 위해 사용됨. 예를 들어, 어떤 서버에 1분간 사용자가 요청한 로그가 있음. 이 서버에 붙어서 요청한 IP를 기준으로 사용자의 수가 얼마나 되는지 확인한다고 가정. 중복된 사용자는 모두 1로 봐야 하므로 set으로 추출이 필요함. Set 인터페이스를 구현한 주요 클래스 HashSet, TreeSet, LinkedHashSet HashSet : 순서가 전혀 필요 없는 데이터를 해시 테이블에 저장. Set 중에 가장 성능이 좋다 TreeSet : 저장된 데이터의 값에 따라 정렬됨. HashSet 보다 성능이 약간 느림. LinkedHashSet : 저장된 순서에 따라 값이 정렬. 성능 가장 나쁨. HashSet 클래스의 상속 관계 java.la..

Java 2021.04.30

[JAVA] 10. 자바 컬렉션(List편)

자바에서 컬렉션은 목록성 데이터를 처리하는 자료 구조를 통칭한다. 자바에서의 데이터를 담는 자료 구조는 다음과 같다. 순서가 있는 목록(List)형 순서가 중요하지 않은 셋(Set)형 먼저 들어온 것이 먼저 나가는 큐(Queue)형 키-값(Key-value)으로 저장되는 맵(Map)형 목록, 셋, 큐는 Collection이라는 인터페이스를 구현한다. public interface Collection extends Iterable Collection 인터페이스는 제네릭 타입(요소)로 선언되어 있고, Iterable인터페이스를 확장한다. List 인터페이스는 배열처럼 "순서"가 있고, 이를 구현한 클래스들은 ArrayList, Vector, Stack, LinkedList가 있다. ArrayList의 객체는..

Java 2021.04.30

[JAVA] 9. 특별한 java.lang 패키지

java.lang 패키지는 아주 특별하다. 자바의 패키지 중에서 유일하게 import를 안해도 사용할 수 있기 때문. 그만큼 자바에서 꼭 필요한 여러 기능들을 제공함. 여기서는 자바 개발자가 꼭 알고 있어야 할 항목들만 소개한다. 문자열 관련 - CharSequence 인터페이스 - String, StringBuffer, StringBuilder 클래스 기본 자료형 및 숫자 관련 - Boolean, Byte, Character, Double, Float, Integer, Long, Math, Number, Short 클래스 쓰레드 관련 - Runnable 인터페이스 - Thread, ThreadGroup, ThreaLocal 클래스 예외 관련 - Throwable 클래스 - Exception 예외 및 에..

Java 2021.04.30