본문 바로가기

JAVA

(34)
쓰레드 실행 제어 1. 쓰레드의 우선 순위 : priority 쓰레드는 우선 순위(priority)라는 static final 변수를 가지고 있다. 이 우선 순위는 최소 1 부터 최대 10 까지 지정할 수 있으며, 별도의 우선 순위를 지정하지 않았다면 우선 순위는 default 값으로 5 가 배정된다. 또한 기본적으로 쓰레드의 우선 순위를 해당 쓰레드를 생성하는 쓰레드의 우선 순위를 상속받게 된다. 즉, main 쓰레드는 우선 순위가 5 인 쓰레드인데 여기에서 쓰레드를 생성한다면 생성된 쓰레드의 우선 순위 또한 5 가 되는 것이다. 쓰레드에 우선 순위를 두게 되면 기본적으로 우선 순위가 높은 쓰레드가 먼저 실행되고, 비교적 우선 순위가 높지 않은 쓰레드는 좀 더 이후에 실행되게 된다. 하지만 이는 우선 순위에 차이가 없는..
싱글쓰레드와 멀티쓰레드 1. Process 와 Thread 프로세스와 쓰레드는 자주 혼용되는 단어이다. 프로세스는 '실행 중인 프로그램'을 말하고, 프로세스가 프로그램을 실행하는 데에 필요한 작업을 수행하는 것을 쓰레드라고 한다. 이런 상태를 프로그램이라고 하고, 이걸 실행시켜 작업 관리자에서 확인할 수 있는 상태가 바로 프로세스이다. 모든 프로세스에는 작업을 수행하는 쓰레드가 있고, 이는 최소 하나 이상의 쓰레드를 가질 수 있다. 즉 두 개 이상의 쓰레드를 가진 상태를 '멀티 쓰레드(Multi-Threaded)' 라고 하는 것이고, 이 프로세스를 '멀티 쓰레드 프로세스'라고 한다. 하나의 프로세스가 가질 수 있는 쓰레드의 개수는 명시적으로 제한되어 있지 않지만, 하나의 쓰레드는 각각 개별적인 메모리 공간(호출 스택)을 필요로..
Calendar 로 달력 만들기 1. Calendar 란? JDK1.8 부터는 java.time 패키지가 Calendar 와 Date 의 단점을 보안한 형태로 추가되었으나, 기존의 클래스를 알고 있어야 새로운 패키지의 활용에도 수월해지기 때문에 Calendar 클래스를 활용해 보고자 한다. Calendar 클래스는 추상 클래스로 인스턴스를 생성할 수 없고 getInstance() 라는 static 메서드를 통하여 인스턴스를 생성할 수 있다. 📌 추상 클래스에서 인스턴스를 생성할 수 없는 이유 추상 클래스에는 추상 메서드가 있을 수 있다는 가능성으로 인하여 불완전한 설계도가 되어 이로 인하여 자신의 인스턴스를 만들 수가 없어진다. 대신 익명 클래스 등을 활용하여 추상 메서드를 작성하면 외부에서 인스턴스를 생성할 수도 있다. 📌 getIn..
SimpleDateFormat : 날짜와 시간 출력하기 1. SimpleDateFormat 이란? Date 와 Calendar 등 날짜와 시간에 관련한 클래스의 출력을 할 때에 원하는 형식을 지정할 수 있게 하는 클래스이다. SimpleDateFormat 을 사용했을 때와 사용하지 않았을 때를 비교해보면 그 차이를 확실히 구분할 수 있게 된다. // yyyy-MM-dd hh:mm:ss 이 포멧으로 지정 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); // 기준시 String str = "2022-10-07 10:10:10"; // Calendar 객체 생성 Calendar calendar = Calendar.getInstance(); // Date 객체 생성 Date dat..
Serializable 과 File 활용하기 1. 직렬화(Serializable) 직렬화란 객체를 데이터 스트림으로 만드는 것을 의미한다. 객체는 클래스에 정의된 인스턴스 변수의 집합으로 객체는 오직 인스턴스 변수로만 구성되어 있다. (클래스 변수와 메서드는 method area 에 저장되고 인스턴스 변수만 heap 영역에 저장된다.) 2. ObjectInputStream 과 ObjectOutPutStream 직렬화를 위해서는 ObjectOutPutStream 를 사용하고, 역직렬화를 위해서는 ObjectInputStream 를 사용한다. 직렬화 (객체 👉 스트림) : ObjectOutPutStream 역직렬화 (스트림 👉 객체) : ObjectInputStream 해당 스트림은 이름에서도 알 수 있듯이 바이트 기반 스트림 InputStream /..
문자 기반 스트림 : Reader, Writer 1. Reader 와 Writer 자바 세계에서는 편의성을 위하여 byte 대신 char 타입을 이용하여 파일을 입출력 할 수 있도록 한다. 어떤 타입을 다루느냐가 다른 것일뿐 활용 방법은 byte 기반 스트림과 굉장히 유사하다. read 메서드 writer 메서드 int read() void write(int b) int read(char[] c) void write(char[] c) void write(String s) abstract int read(char[] c, int off, int len) abstract void write(char[] c, int off, int len) void write(String s, int off, int len) 위의 표에서도 확인할 수 있듯이 write 메서..
바이트 기반 스트림 : InputStream, OutPutStream 1. 바이트 기반 스트림 자바 외부 세계에서는 모든 데이터를 byte 단위로 저장하고 사용하며, 이러한 데이터를 읽고 쓰기 위하여 자바에서는 바이트 기반 스트림 'InputStream' 과 'OutputStream'을 제공하고 있다. 2. InputStream, OutPutStream 'InputStream' 과 'OutputStream' 은 모든 바이트 기반 스트림의 조상이며, 다음과 같은 메서드를 정의하고 있다. InputStream OutputStream abstract int read() abstract void write(int b) int read(byte[] b) void write(byte[] b) int read(byte[] b, int off, int len) void write(byt..
Iterator, ListIterator, Enumeration Iterator, ListIterator, Enumeration 은 컬렉션의 저장 요소에 접근하는 데에 사용되는 인터페이스이다. Enumeration 은 legacy 클래스로 사용이 자제되고 있으며, Iterator 또는 더 향상된 ListIterator 를 사용해야 한다. 1. Iterator Iterator 는 컬렉션에 저장된 데이터를 제어하고자 하는 목적이 아닌, 순차 탐색을 목적하고 있다. Collection 인터페이스에는 Iterator 를 반환하는 iterator() 메서드를 정의하고 있다. 즉, List와 Set 또한 이를 포함하고 있고 이들을 구현한 클래스에 iterator() 메서드를 호출하여 Iterator 를 반환받아 반복문(for, while) 등을 이용하여 컬렉션의 요소를 읽을 수..