- ···
- 8.
[멀티캠퍼스] 풀스택 개발자 아카데미 (8) - Java(2) - 9.[멀티캠퍼스] 풀스택 개발자 아카데미 (9) - Java(3)현재
- 10.
[멀티캠퍼스] 풀스택 개발자 아카데미 (10) - SQL - ···
1.Thread - 동시에 처리하기
현대의 SW는 여러 작업을 동시에 처리하는 것이 기본이다. 동영상을 재생하면서 채팅을 할 수 있는 것 처럼 말이다.
Java에서는 이를 멀티쓰레딩(Multi-Threading) 을 통해 동시성을 구현할 수 있다.
1.1.Process와 Thread
- Process: OS(운영체제;Operating System)에서 실행 중인 하나의 애플리케이션(프로그램)을 의미한다. 각 프로세스는 자신만의 독립된 메모리 공간을 가진다.
- Thread: 프로세스 내에서 실제 작업을 수행하는 가장 작은 단위를 말한다. 하나의 프로세스는 여러 개의 쓰레드를 가질 수 있으며, 같은 프로세스 내의 쓰레드들은 메모리 자원을 공유한다.
즉, Process가 하나의 '식당'이고, Thread는 그 안에서 각자 업무를 담당하는 직원(요리사, 카운터 직원, 웨이터 등)과 같다. 여러 직원이 협력하여 식당의 작업을 효율적으로 처리하는 것이다.
1.2.Java의 Thread 생성
모든 자바 프로그램은 main() 메소드를 실행하는 Main Thread와 함께 시작된다. 우리는 이 메인 쓰레드 외에 별도의 작업 쓰레드를 만들고, 여러 작업을 병렬로 실행할 수 있다.
1.2.1.방법1 - Thread 상속
Thread클래스를 직접 상속받고, 쓰레드가 수행할 작업은 run() 메소드 안에 재정의(@Override)하는 방식이다.
1.2.2.방법2 - Runnable 인터페이스 구현
Runnable Interface를 직접 구현하여 작업 내용을 정의하고, 이객체를 Thread 생성자에 전달하는 방식으로, Java는 다중 상속을 지원하지 않기 때문에, 다른 클래스를 상속해야 할 경우를 상정하여 Runnable을 implements하는 것이 더 유연하고 일반적이다.
2.Java 기본 API 클래스
API(Application Programming Interface) 는 개발을 돕기 위해 미리 만들어진 클래스와 기능들의 모음이다. Java는 방대한 양의 기본 API가 있으며, 특히 java.lang 패키지는 import 선언 없이 자동으로 사용할 수 있는 핵심 클래스들을 담고 있다.
2.1.String 클래스 - 문자열
String 은 Java에서 문자열을 다루는 가장 기본적이고 중요한 클래스로, String 객체는 Immutability(불변성) 이라는 중요한 특징을 가진다. 한번 생성된 String 객체의 내용은 변경될 수 없고, 문자열을 수정하는 메소드를 호출하면 항상 새로운 String 객체가 생성된다.
2.2.Wrapper 클래스
Java의 컬렉션 프레임워크나 제네릭에서는 객체 타입만 다룰 수 있다. 이때, int, double과 같은 기본 타입(Primitive Type) 을 객체처럼 다루기 위해서는 Wrapper Class를 사용해야 한다.
- Boxing: 기본 타입값을 Wrapper 객체로 감싸는 과정 (
int->Integer) - Unboxing: Wrapper 객체에서 기본 타입 값을 추출하는 과정 (
Integer->int) - Auto-boxing: Java 5 부터는 컴파일러가 자동으로 Boxing/Unboxing을 처리함
2.3.Arrays Class - 배열
Arrays는 배열을 정렬, 검색 및 복사 등 배열을 더 쉽게 사용/조작할 수 있도록 static 메소드를 제공하는 유틸리티 클래스이다.
2.4. Pattern - 정규 표현식
정규표현식(Regular Expression) 은 이메일 형식, 전화번호 형식 처럼 특정한 패턴을 가진 문자열을 검증할 때 유용한 클래스이다. Java에서는 Pattern 클래스의 matches()를 사용하면 문자열이 특정 정규 표현식에 부합하는지 확인할 수 있다.
2.5.날짜와 시간 API
Date 클래스틑 특정 시점의 날짜와 시간 정보를 표현한다. 하지만 Date는 우리가 보기 쉬운 형식(2025-08-18 13:00 ....)이 아니기 때문에, 이를 표현하기 위해 SimpleDateFormat 클래스를 사용한다. 해당 클래스는 원하는 패턴에 맞춰 날짜는 문자열로 변환하거나, 문자열을 날짜 객체로 변환할 수 있다.
3. 향후 공부해야할 내용
Thread 심화
- 멀티캠퍼스 2과목인 이번 과목에서 다룬 Thread는 개념 설명이 부족한 편이다. 필자와 같은 전공자는 문제 없을 수 있지만, 만약 Thread의 개념을 이해하지 못했다면, 따로 조사가 필요할 것이다.
- 여러 쓰레드가 하나의 자원을 공유하기 때문에, 동기화 기법을 구현하는 방법과 쓰레드 관리를 위한 쓰레드 풀에 대한 조사도 필요하다.
API
- Java 8 이후로 도입된 Stream이나 Lambda도 알아두면 좋을 것이다.
- 또한
Date와SimpleDateFormat를 보완한java.time도 조사해보면 좋을 듯 하다.