자바프로그래밍 33

[Java-14] 람다식(Lambda expression)

1.람다식(Lambda expression) 1) 람다식이란? - 메서드를 하나의 '식(expression)'으로 표현한 것 - 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줌 - JDK1.8부터 추가 - 익명 함수(anonymous function)라고도 함 2) 람다식 작성 반환타입 메서드이름(매개변수 선언) { 문장들 } ↓ 반환타입 메서드이름 (매개변수 선언) -> { 문장들 } - 기존 메서드 int max(int a, int b) { return a > b ? a : b; } - 이름과 반환타입 제거 (int a, int b) -> { return a > b ? a : b; } - return문 대신 '식'으로 표현 가능 - 연산결과는 자동적으로 반환값이 됨 - 끝에 ';'을 붙이지 않..

공부/Java 2021.07.06

[Java-13] 쓰레드(Thread)

1. 프로세스와 쓰레드 1) 프로세스와 쓰레드의 정의 - 프로세스(process) : 실행 중인 프로그램(program) - 쓰레드(thread) : 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것 - 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 됨 - 프로세스에는 최소한 하나 이상의 쓰레드가 존재 - 멀티쓰레드 프로세스(multi-threaded process) : 둘 이상의 쓰레드를 가진 프로세스 - 프로세스의 메모리 한계에 따라 생성할 수 있는 쓰레드의 수가 결정됨 2) 멀티태스킹과 멀티쓰레딩 - 멀티태스킹(multi-tasking, 다중작업) : 여러 개의 프로세스를 동시에 실행할 수 있는 환경 - 멀티쓰레딩(multi-threading) : 하나의 프로세..

공부/Java 2021.07.06

[Java-12] 애너테이션(Annotation)

1. 애너테이션(Annotation)이란? - 주석(comment)처럼 프로그래밍 언어에 영향을 미치지 않으면서, 다른 프로그램에게 유용한 정보 제공 2. 표준 애너테이션 - 자바에서 기본적으로 제공하는 애너테이션 - 주로 컴파일러에게 유용한 정보 제공 @Override 컴파일러에게 오버라이딩하는 메서드라는 것을 알림 @Deprecated 앞으로 사용하지 않을 것을 권장함 @SuppressWarnings 컴파일러의 특정 경고메시지가 나타나지 않게 해줌 @SafeVarargs 지네릭스 타입의 가변인자에 사용 (JDK1.7) @FunctionalInterface 함수형 인터페이스라는 것을 알림 (JDK1.8) @Native native메서드에서 참조되는 상수 앞에 붙임(JDK1.8) ① @Override -..

공부/Java 2021.07.02

[Java-12] 열거형(Enums)

1. 열거형(enums)이란? - 서로 관련된 상수를 편리하게 선언하기 위한 것 - 여러 상수를 정의할 때 유용 - 자바의 열거형은 '타입에 안전한 열거형(typesafe enum)' - 값뿐만 아니라 타입까지 체크하기 때문 - 열거형 상수를 사용하면 기존의 소스를 다시 컴파일하지 않아도 됨 2. 열거형의 정의와 사용 1) 열거형의 정의 enum 열거형이름 { 상수명1, 상수명2, ... } 2) 열거형의 사용 열거형이름.상수명 enum Direction { EAST, SOUTH, NORTH, WEST } class Unit { int x, y; Direction dir; void init() { dir = Direction.EAST; } } - swtich문의 조건식에서도 열거형 사용 가능 void m..

공부/Java 2021.07.02

[Java-12] 지네릭스(Generics)

1. 지네릭스(Generics)란? - 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(compile-time type check)를 해주는 기능 - JDK1.5부터 도입 - 객체의 타입 안전성을 높이고 형변환의 번거로움을 줄임 (객체의 타입 안정성을 높이다 = 의도하지 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여줌) 2. 지네릭스 클래스의 선언 1) 지네릭 클래스 class Box { Object item; void setItem(Object item) { this.item = item; } Object getItem() { return item; } } class Box { T ..

공부/Java 2021.07.02

[Java-11] 컬렉션 프레임웍 - HashMap, TreeMap, Properties, Collections

1. HashMap 1) HashMap이란? - Hashtable의 새로운 버전 - Hashtable보다는 HashMap을 사용할 것을 권함 - HashMap은 Map을 구현했으므로 Map의 특징을 이어받음 (1) 키(key)와 값(value)을 묶어서 하나의 데이터(entry)로 저장함 (2) 순서를 유지하지 않음 (3) 키는 중복을 허용하지 않고, 값은 중복을 허용함 - 추가로 해싱(hashing)을 사용하여 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 보임 - 키(key)는 주로 String을 대문자 또는 소문자로 통일해서 사용함 - 키(key)는 저장된 값을 찾는데 사용되므로 컬렉션 내에서 유일(unique)해야 함 = 하나의 키로 검색했을 때 결과가 단 하나여야 함 2) 생성자 HashM..

공부/Java 2021.06.07

[Java-11] 컬렉션 프레임웍 - Stack, Queue, Iterator, ListIterator, Enumeration

1. 스택(Stack), 큐(Queue) 1) 스택과 큐의 차이 - 스택은 'LIFO', 큐는 'FIFO'임 - LIFO(Last In First Out) : 마지막에 저장한 데이터를 가장 먼저 꺼내는 구조 - FIFO(First In First Out) : 처음에 저장한 데이터를 가장 먼저 꺼내는 구조 - 스택(LIFO)는 0, 1, 2 순으로 저장(push)한 뒤, 2, 1, 0 순으로 추출(pop) - 큐(FIFO)는 0, 1, 2 순으로 저장(push)한 뒤, 0, 1, 2 순으로 추출(pop) Q. 스택과 큐를 구현하기 위해서는 어떤 컬렉션 클래스를 사용하는 것이 좋을까? A1. 스택은 순차적으로 데이터를 추가 및 삭제하므로 ArrayList와 같은 배열기반의 컬렉션 클래스가 적합함 A2. 큐는..

공부/Java 2021.04.14

[Java-11] 컬렉션 프레임웍 - ArrayList, LinkedList

1. 컬렉션 프레임웍(Collections Framework) 1) 컬렉션 프레임웍이란? - 데이터 군(群)을 저장하는 클래스들을 표준화한 설계 - 컬렉션(Collection) : 다수(多數)의 데이터 - 프레임웍(Framework) : 표준화된 프로그래밍 방식 - 컬렉션 클래스 : 다수의 데이터를 저장할 수 있는 클래스 2) 컬렉션 프레임웍의 장점 (1) 컬렉션, 다수의 데이터를 다루는 데 필요한 다양하고 풍부한 클래스들을 제공 -> 프로그래머의 짐을 덜어줌 (2) 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화 -> 사용법이 편리하고 재사용성이 높음 3) 핵심 인터페이스 - 컬렉션데이터 그룹을 크게 3가지 타입이 존재한다고 인식하여 각 컬렉션을 다루는데 필요한 기능을 가진 3개의 인터페이스..

공부/Java 2021.04.13

[Java-10] 날짜와 시간 & 형식화 - java.time패키지

1. java.time패키지란? - JDK1.8부터 추가된 패키지 - Date와 Calendar의 단점을 해소 - Calendar클래스와 다르게 '불변(immutable)'임 - java.time패키지와 서브 패키지들 패키지 설 명 java.time 날짜와 시간을 다루는데 필요한 핵심 클래스들을 제공 java.time.chrono 표준(ISO)이 아닌 달력 시스템을 위한 클래스들을 제공 java.time.format 날짜와 시간을 파싱하고, 형식화하기 위한 클래스들을 제공 java.time.temporal 날짜와 시간의 필드(field)와 단위(unit)를 위한 클래스들을 제공 java.time.zone 시간대(time-zone)와 관련된 클래스들을 제공 - Calendar클래스와 달리, java.tim..

공부/Java 2021.04.12

[Java-10] 날짜와 시간 & 형식화 - Calendar, 형식화 클래스

1. 날짜와 시간 1) Calendar와 Date - java.util의 클래스로 날짜와 시간을 다룰 목적으로 제공 - JDK 1.8부터 'java.time패키지'로 기존의 단점들을 개선한 새로운 클래스들이 추가됨 - 하지만 Calendar와 Date는 20년 넘게 사용되어 왔으므로 기능을 알아두면 좋음 2) Calendar클래스 - Calendar는 추상클래스이므로 직접 객체를 생성할 수 없음 - 메서드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야 함 Calendar cal = new Calendar();// 에러! 인스턴스 생성 불가능 Calendar cal = Calendar.getInstance(); - GregorianCalendar : Calendar를 상속받은 완전한 클래스로, 태국을 ..

공부/Java 2021.03.12