줭 Blog 66

[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] BufferedReader와 BufferedWriter

1. Buffer - 코딩테스트와 같이 실행 속도와 같은 효율을 고려해야하는 경우, IO를 대부분 Scanner와 System.out.println보다는 BufferedReader와 BufferedWriter를 사용함 - 버퍼(Buffer) : 데이터를 어떤 지점에서 다른 지점으로 전송하는동안 일시적으로 데이터를 보관하는 메모리의 영역 - Buffer를 사용하는 이유 (1) Buffer를 사용하지 않는 경우, 사용자가 입력하는 즉시 프로그램에 전달됨 (성능저하) (2) Buffer를 사용하는 경우, 사용자가 입력을 마칠 때까지 Buffer에 담아뒀다가 입력이 끝나면 한꺼번에 프로그램으로 전달 - Stream을 사용하기 때문에 예외처리가 요구됨 (1) try-catch를 사용함 (2) 메서드에 throws..

공부/Java 2021.06.13

[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

[알고리즘-04] 정렬(Sorting) - 퀵 정렬, 병합 정렬, 힙 정렬

1. 퀵 정렬(Quick sort) 1) 퀵 정렬이란? - 일반적으로 사용되고 있는 아주 빠른 정렬 알고리즘 - 각 그룹에 대해 피벗 설정과 그룹 나눔을 반복하여 모든 그룹이 1명이 되면 정렬을 마침 - 피벗(pivot) : 그룹을 나누는 기준이 되는 요소 - 시간복잡도는 O(n log n) - 하지만 최악의 경우, O(n²) 2) 배열을 두 그룹으로 나누기 - x : 피벗 - pl : 왼쪽 끝 요소의 인덱스 - pr : 오른쪽 끝 요소의 인덱스 (1) a[pl] >= x 가 성립하는 요소를 찾을 때까지 pl을 오른쪽으로 스캔 (2) a[pr] pr + 1인 경우에는 피벗과 일치하는 값을 가지는 그룹(a[pr+1], ... , a[pl-1])이 생길 수 있음 static void swap(int[] a,..

공부/알고리즘 2021.05.22

[Spring-02] Spring이란?

1. Spring이란? - https://spring.io/ Spring makes Java simple. Level up your Java code and explore what Spring can do for you. spring.io Spring Framework - 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크 (프레임워크 -> 이전 글 참조) - 간단히 스프링(Spring)이라고도 함 - 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공함 - 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로써 쓰이고 있음 - Spring Version 1.0 : 2004년 3월 2.0 : 2006년 10월 2.5 : 2007년 11월 3.0 : 2..

공부/Spring 2021.05.17

[Spring-01] 라이브러리와 프레임워크의 차이점

1. 라이브러리와 프레임워크 1) 라이브러리(Library) - 특정 기능에 대한 도구 또는 함수들의 집합 - 프로그램 기능 수행을 위해 활용 가능한 도구의 집합 - 개발자가 만든 클래스에서 호출하여 사용함 2) 프레임워크(Framework) - 뼈대, 기반구조 - 소프트웨어의 특정 문제를 해결하기 위해 상호 협력하는 클래스와 인터페이스의 집합 - 완성된 제품 X - 완성된 제품을 만들기 위해 개발자를 도와주거나 기반이 되는 역할 3) 라이브러리와 프레임워크의 차이점 - 제어의 주체(제어의 흐름을 쥐고 있는 것)는 누구인가? ① 라이브러리 : 개발자, 코드에서 라이브러리 함수를 호출함 ② 프레임워크 : 프레임워크, 프레임워크에서 개발자의 코드를 호출함 (제어의 역전) ※ 제어의 역전(Inversion o..

공부/Spring 2021.05.17