반응형

언어(Language)/Java 94

[Java] 자바 스택(Stack) 클래스 메서드 정리 및 활용

스택이란? 스택은 ‘쌓다.’, ‘쌓이다.’와 같은 뜻을 가진 용어로, 접시를 높이 쌓아 놓은 형태와 비슷한 자료구조이다. 즉, 데이터를 순서대로 쌓는 자료구조이다. 실생활에서 흔히 접할 수 있는 스택은 프링글스와 같은 원통에 들어가 있는 과자를 떠올리면 이해하기 쉽다. 가장 위에 있는(가장 나중에 들어간) 과자를 먼저 꺼내어 먹는 구조이기 때문이다. 스택은 가장 나중에 들어온 데이터가 가장 먼저 빠져나가는 후입선출(LIFO : Last In First Out) 구조로 되어 있어, 프로그래밍에서 데이터가 입력된 순서대로 처리되는 것이 아닌, 가장 나중에 들어온 데이터를 먼저 처리할 때 사용한다. 스택의 특징 후입선출 (LIFO : Last In First Out) 구조 : 먼저 들어온 데이터가 나중에 빠져..

[Java] 자바 정규 표현식(Regex) 개념 정리 및 활용

Intro 대부분의 웹 서비스에서 회원 가입을 필요로 하며, 회원 가입 시 ID 또는 비밀번호를 설정할 때 특정 조건에 맞추어 입력하라고 요구한다. 예를 들어 비밀번호 입력 시 영문 대소문자를 한 번씩 이상 사용해야 하며, 12자 이상, 특수 문자 1개 이상 포함 등 서비스에서 요구하는 조건에 맞추어야 한다. 서비스 관리자는 이러한 요구사항의 유효성을 어떻게 설정하고 검증하는지는 여러 가지 방법이 있을 것이다. 문자를 하나하나 검사하거나, 모든 조건에 대해 참인 경우 등 다양한 방법이 있겠지만, 문자열 관리를 간편하게 하는 정규표현식도 있다. 정규 표현식(Regex : Regular Expression)이란? 정규표현식은 문자열에서 특정한 규칙에 따른 문자열 집합을 표현하기 위해 사용되는 형식 언어이다...

[Java] 자바 가상 머신(JVM: Java Virtual Machine)이란?

Intro C++과 자바는 인기 있는 객체지향 프로그래밍 언어이다. 하지만 자바는 C++과는 다르게 운영체제에 독립적이라는 큰 차이가 있다. 즉, C++은 운영체제에 따라 새로운 프로그램을 작성해야 하는 반면에, 자바는 소스 코드를 한 번만 작성하면, 어떤 운영체제에서도 코드를 수정할 필요 없이 프로그램을 실행시킬 수 있다. 이렇게 운영체제에 독립적일 수 있도록 도와주는 것이 자바 가상 머신(JVM: Java Virtual Machine)이다. JVM이란? (자바 가상 머신) JVM은 자바 프로그램을 실행시키는 도구로 자바 언어로 작성한 코드들은 JVM이 해석하게 되는 별도의 프로그램이다. 먼저, 프로그램이 실행되기 위해서는 CPU, 메모리, I/O 장치 등 컴퓨터 자원을 프로그램이 할당받아야 한다. 이..

[Java] 자바 스레드 상태 제어 메서드 종류 및 사용법

Intro 스레드를 생성하고 실행시키기 위해서는 start() 메서드를 호출해야 한다. 엄밀히 말하면 start() 메서드는 스레드를 실행시키는 것이 아닌 실행 대기 상태로 만들어주는 메서드이다. 따라서, start() 메서드가 호출되면 해당 스레드는 대기 상태가 되고, 운영체제가 스레드를 실행시킨다. 이는 스레드에는 상태가 존재한다는 것을 알 수 있으며, 이러한 스레드의 상태를 바꿀 수 있는 메서드가 존재한다. 스레드의 상태 제어 메서드 스레드 상태를 제어하기 위한 여러 가지 메서드가 존재한다. 스레드를 실행 대기 상태로 만드는 start(), notify(), interrupt(), yield() 메서드, 실행 중인 스레드를 잠시 멈추는 sleep(), wait(), join() 메서드가 있다. sl..

[Java] 자바 스레드 동기화 개념 정리 및 활용 (Thread Synchronization)

스레드 동기화란? (Thread Synchronization) 프로세스는 자원과 데이터, 스레드로 구성되어 있다. 따라서 프로세스는 스레드가 운영체제로부터 자원을 할당받아 소스 코드를 실행하여 데이터를 처리한다. 만약, 싱글 스레드 프로세스라면, 공유 데이터에 단 하나의 스레드만이 접근하므로 문제가 될 것이 없다. 하지만, 멀티 스레드 프로세스의 경우, 두 개 이상의 스레드가 공유 데이터에 동시에 접근하게 되면 예상과 벗어난 결과가 타나날 수 있다. 이러한 문제를 해결해 주는 것이 바로 스레드 동기화다. 스레드 동기화를 안하는 경우 의도적으로 계좌에 동시 접근이 가능하도록 만든 코드이다. 출금할 금액이 계좌 잔액보다 크면, 출금을 못하도록 설정하였으나, 실행 과정에서 의도적으로 스레드가 동시에 접근할 수..

[Java] 자바 스레드(Thread) 이름 조회 및 설정하기

스레드 이름 메인 메서드의 소스 코드를 읽는 메인 스레드는 “main”이라는 이름을 가지고 있다. 추가적으로 생성한 스레드는 기본적으로 “Thread-n”이라는 이름을 가진다. (n은 0부터 스레드의 개수만큼 증가하여 명명) 이러한 스레드의 이름을 조회하거나 생성한 스레드의 이름을 설정할 수 있다. 스레드 이름 조회 스레드의 이름을 조회하는 방법은 다음과 같다. // 스레드의 참조변수 이름.getName() System.out.println(thread.getName()); 스레드의 이름 조회 예제 public class ThreadName { public static void main(String[] args) { // Runnable 익명 구현 객체 Thread thread1 = new Thread(..

[Java] 자바 스레드(Thread)의 생성과 실행 방법 예제

작업 스레드 생성과 실행 멀티 스레드를 구현하기 위해 작업 스레드가 수행할 코드를 작성하고, 작업 스레드를 생성하여 실행시켜야 한다. 자바의 모든 코드는 클래스 안에 작성해야 한다. 따라서 스레드가 수행할 코드 또한 클래스 내부에 작성해야 하며, run() 메서드를 통해 스레드가 처리할 작업을 작성해야 한다. run() run() 메서드는 Runnable 인터페이스와 Thread 클래스에 정의되어 있다. 작업 스레드를 생성하고 실행하려면, Runnable 인터페이스를 구현한 객체에서 run() 메서드를 구현하여 스레드를 생성하고 실행하거나, Thread 클래스를 상속받은 하위 클래스에서 run() 메서드를 구현하여 스레드를 생성하고 실행해야 한다. Runnable 인터페이스를 활용하여 run() 메서드를..

[Java] 자바 스레드(Thread) 개념 정리

Intro 데스크톱에서 Windows의 작업 관리자나 Mac의 활성 상태 보기에 들어가면, 실행 중인 프로그램들이 나열된다. 이렇게 실행 중인 프로그램이나 어플리케이션을 프로세스라 한다. 프로세스 내에서는 실행되는 소스 코드의 실행 흐름들이 존재하는데, 이를 스레드(Thread)라 한다. 하나의 프로세스에는 하나의 스레드를 가질 수 있고, 여러 개의 스레드를 가질 수 있다. 하나의 스레드를 가지는 프로세스를 싱글 스레드 프로세스, 여러 개의 스레드를 가지는 프로세스를 멀티 스레드 프로세스라 한다. 이를 해석하면, 멀티 스레드 프로세스는 프로그램 또는 어플리케이션이 동시 작업을 할 수 있다는 것이다. 즉, 여러 코드를 각 스레드에 분배하여 동시에 실행시키는 것이다. 자바에서도 소스 코드 내에서 따로 스레드..

[Java] 자바 파일 클래스(File Class) 개념 정리 및 활용

File File 클래스는 자바에서 파일 File 클래스를 통해 파일과 디렉토리에 접근할 수 있다. 파일에 접근하기 위해, hello.txt라는 파일을 작성하여 저장한다. // hello.txt hello 다음은 자바에서 hello.txt 파일에 접근하는 예제이다. 만약, hello.txt 파일이 존재하지 않더라도 컴파일 에러가 발생하지는 않는다. import java.io.File; import java.io.IOException; public class FileEx { public static void main(String args[]) throws IOException { File file = new File("../hello.txt"); System.out.println(file.getPath()..

[Java] 자바 파일 입출력 스트림 FileReader와 FileWriter 개념 정리 및 활용

FileReader와 FileWriter FileReader와 FileWriter는 바이트 기반 스트림인 FileInputStream과 FileOutputStream의 단점을 해결하는 문자 기반 스트림이다. 따라서 문자 기반 스트림 FileReader와 FileWriter는 문자 데이터를 다룰 때 사용한다. 문자 기반 스트림과 그 하위 클래스는 여러 종류의 인코딩과 자바에서 사용하는 유니코드(UTF-16) 간의 변환을 자동으로 처리한다. 바이트 기반 스트림의 FileInputStream은 문자 기반 스트림의 FileReader 바이트 기반 스트림의 FileOutputStream은 문자 기반 스트림의 FileWriter로 대응된다. 즉, FileReader는 인코딩을 유니코드로 변환, FileWriter는..

반응형