본문 바로가기

프로그래밍 공부/Java

(25)
Java - Java 8 : 스트림 API(Steam API) 스트림 API Java에서는 많은 양의 데이터를 저장하기 위해 배열이나 컬렉션을 사용한다. 이렇게 저장된 데이터에 접근하기 위해 반복문이나 반복자(Iterator)를 사용해 매번 새로운 코드를 작성하는데, 이렇게 되면 작성된 코드의 길이가 길어지고 가독성도 떨어지고 코드의 재사용이 불가능해진다. 데이터베이스의 쿼리(Query)와 같이 정형화된 처리 패턴을 가지지 못했기 때문에 데이터마다 다른 방법으로 접근해야만 했다. 이런 문제점을 해결하기 위해 Java SE 8 부터 스트림 API(Stram API)가 만들어 졌다. 스트림 API는 데이터를 추상화해 다루며, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공한다. 따라서 스트림 API를 이용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된..
Java - Java 8 : Lambda 람다 표현식(Lambda expression) 람다 표현식은 JavaScript의 '화살표 함수(또는 람다식)'과 같다. 1 2 3 4 5 6 7 // 일반적인 메서드 int min(int x, int y) { return x x x { 함수몸체 } new Thread(new Runnable(){ public void run(){ System.out.println("전통적인 방식의 일회용 스레드 생성"); } }).start(); new Thread(() -> { System.out.println("람다 표현식을 사용한 일회용 스레드 생성"); }).start(); Colored by Color Scripter cs 함수형 인터페이스(Functional interface) 람다 표현식을 사용할 때는 람다..
Java - 컬렉션 프레임워크(Collection framework) Java에서 컬렉션 프레임워크는 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합이다. 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화해 클래스로 구현한 것이다. 컬렉션 프레임워크는 자바의 인터페이스를 사용해 구현된다. 컬렉션 프레임워크의 주요 인터페이스 컬렉션 프레임워크에서 데이터를 저장하는 자료 구조에 따라 아래와 같은 핵심이 되는 주요 인터페이스를 정의 한다. 1. List 인터페이스 2. Set 인터페이스 3. Map 인터페이스 이중에서 List와 Set 인터페이스는 모두 Collection 인터페이스를 상속받고 Map 인터페이스는 구조상의 차이로 별도로 정의된다. 따라서 List 인터페이스와 Set 인터페이스의 공통된 부분을 Collecti..
Java - 스레드(Thread) 프로세스(Process) 프로세스는 단순히 실행 중인 프로그램(Program)이라고 할 수 있다. 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 이런 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성이 된다. 스레드(Thread) 스레드는 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 한 개 이상의 스레드가 존재해 작업을 수행한다. 또한 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(Multi-threaded process)라고 한다. Java와는 다르게 JavaScript에 경우는 기본적으로 스레드가 하나인 싱글 스레드 프로세스(Single-threaded process)로 작업을 수행한..
Java - 예외 처리 오류(Error)와 예외(Exception) Java 프로그램을 작성할 때 Java 문법에 맞지 않게 코드를 작성하면 문법 오류(Syntax error)가 발생한다. 또 문법에 맞게 작성되었다 하더라도 프로그램이 실행되면서 예상치 못한 오류가 발생할 수도 있다. 이렇게 시스템이 동작하는 도중에 예상치 못한 사태가 발생해 실행중인 프로그램이 영향을 받는 것을 오류와 예외 두 가지로 구분한다. 오류(Error) : 시스템 레벨에서 프로그램에 심각한 문제를 야기해 실행 중인 프로그램을 종료시킨다. 이런 오류는 개발자가 미리 예측해 처리할 수 없는 것이 대부분이기 때문에 오류에 대한 처리는 할 수 없다. 예외(Exception) : 오류와 마찬가지로 실행 중인 프로그램을 비정상적으로 종료시키지만 발생할 수 있는..
Java - 제네릭(Generic) 제네릭(Generic) Java에서 제네릭은 데이터의 타입을 일반화한다는 것을 말한다. 제네릭은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다. 이렇게 컴파일 시에 미리 타입 검사를 수행하면 두 가지 장점이 있다. 1. 클래스나 메서드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다. 2. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 시간을 줄일 수 있다. JDK 1.5 이전에서 여러 타입을 사용하는 대부분의 클래스나 메서드에서 인수나 반환값으로 Object 타입을 사용했다. 하지만 이 경우 반환된 Object 객체를 다시 원하는 타입으로 타입 변환을 해야하며, 이 때 오류가 발생할 수 있다. 하지만 JDK 1.5부터 도입된 제네릭을 사용하면 컴파일 시에 미..
Java - Java API 클래스 : Arrays 클래스 Arrays 클래스 설명 java.util java.lang 패키지 다음으로 가장 많이 사용되는 패키지, 반드시 import문 사용 java.util.Arrays 배열을 다루기 위한 다양한 메서드 포함 binarySearch() 전달받은 배열에서 특정 객체의 위치를 이진 검색 알고리즘으로 검색후 위치 리턴 copyOf() 전달받은 배열의 특정 길이만큼을 새로운 배열로 복사후 리턴 copyOfRange() 전달받은 배열의 특정 범위에 해당하는 요소만으로 새로운 배열로 리턴 fill() 전달받은 배열의 모든 요소를 특정 값으로 초기화 sort() 전달받은 배열의 모든 요소를 오름차순으로 정렬 java.util java.util 패키지는 프로그램을 개발할 때 사용할 수 있는 유용한 유틸리티 클래스가 포함되어 ..
Java - Java API 클래스 : String 클래스 String 클래스 설명 java.lang.String Java에서 String 클래스의 문자열과 관련된 작업을 할때 사용하는 메서드가 포함된 클래스 charAt() 해당 문자열의 특정 인덱스에 해당하는 문자를 반환 compareTo() 해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 비교, 대소문자를 구분 compareToIgnoreCase() 해당 문자열을 인수로 전달된 문자열과 사전 편산 순으로 비교, 대소문자를 구분안함 concat() 해당 문자열의 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환 indexOf() 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환 trim() 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거 toLowerCa..