공부/Java 37

[Java] Logging, SLF4J, Logback

1. Logging - 프로그램 개발 중이나 완료 후 발생할 수 있는 오류에 대해 디버깅하거나 운영 중인 프로그램 상태를 모니터링하기 위해 필요한 정보(로그)를 기록하는 것 - java.util.logging, logback, log4j 등 다양한 Logging Framework 존재 2. SLF4J(Simple Logging Facade for Java) - 다양한 Logging Framework들의 추상화를 제공 (단독 사용 X) - Facade 패턴 -> 구현체의 종류에 상관없이 일관된 로깅 코드 작성 가능 - 개발에서 SLF4J API를 사용하여 로깅 코드를 작성 - 배포에서 바인딩된 Logging Framework가 실제 로깅 코드 수행 - Springboot의 기본 Logging Framewo..

공부/Java 2021.10.06

[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

[Java-11] 컬렉션 프레임웍 - Arrays, Comparator, Comparable, HashSet, TreeSet

1. Arrays - 배열을 다루는데 유용한 메서드가 정의되어 있음 1) 배열의 복사 copyOf(), copyOfRange() - copyOf() : 배열 전체를 복사하여 새로운 배열을 반환 - copyOfRange() : 배열의 일부를 복사하여 새로운 배열을 반환 (지정된 범위의 끝은 포함 X) int[] arr = {0,1,2,3,4}; int[] arr2 = Arrays.copyOf(arr, arr.length);// 0,1,2,3,4 int[] arr3 = Arrays.copyOf(arr, 3);// 0,1,2 int[] arr4 = Arrays.copyOf(arr, 7);// 0,1,2,3,4,0,0 int[] arr5 = Arrays.copyOfRange(arr, 2, 4);// 2,3 2)..

공부/Java 2021.04.15