본문 바로가기
728x90

👨‍🏫Study/JAVA59

[JAVA] 08 - 1 인터페이스(2, 이것이 자바다) 인터페이스의 역할 객체의 사용방법을 정의한 타입이다. 개발 코드와 객체가 서로 통신하는 접점 역할을 한다. 개발 코드가 인터페이스의 메소드를 호출하면, 인터페이스는 객체의 메소드를 실행시킨다. 개발 코드는 객체 내부 구조를 몰라도 인터페이스의 메소드만 알면 된다. 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있게 해준다. 자바에서 다형성을 제공하는데 큰 역할을 한다. 인터페이스 선언법 클래스와 같은 네이밍 규칙을 사용하고, .java 파일로 생성하면 된다. [ public ] interface 인터페이스명 { ... } 인터페이스의 구성요소 인터페이스는 오직 상수(static final)와 메소드만 갖는다. 인터페이스 메소드의 종류 추상 메소드 디폴트 메소드 (자바 8부터) 정적 메소드 (자바.. 2022. 3. 23.
[JAVA] 06 - 7 애노테이션 애노테이션 애노테이션은 메타데이터이다. 애플리케이션이 처리하는 데이터가 아닌 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보이다. 애노테이션의 용도 컴파일러에게 코드 문법 에러를 체크하도록 정보 제공 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공 실행 시 특정 기능을 실행하도록 정보 제공 대표적 애노테이션으로 @Override가 있다. @Override는 메소드가 오버라이드 됐음을 알려주며, 컴파일러가 오버라이드 검사를 하고 정확히 오버라이드가 되지 않았다면 에러를 발생시킨다. 애노테이션은 빌드 시 자동으로 XML 설정 파일을 생성하거나, 배포를 위한 JAR 압축 파일을 생성하는데도 사용된다. 애노테이션은 클래스의 역할을 정의하기도 .. 2022. 3. 23.
[JAVA] 16 - 1 스트림 16.1. 스트림 소개 자바 8버전부터 추가된 컬렉션 요소를 하나씩 참조해서 람다식(함수적 인터페이스)으로 처리할 수 있도록 해주는 반복자이다. 자바 8 이전에는 컬렉션 처리에는 무조건 Iterator가 이용되었으나, 선택의 폭이 넓어졌다. 16.2. 함수적 인터페이스 복습 스트림에서는 함수적 인터페이스를 적극 활용하기 때문에 함수적 인터페이스를 제대로 알고 가면 도움이 된다. 16.2.1. Consumer 매개 값: O (타입: T) 리턴 값: X 값을 소비하고 리턴하지 않음 내부 메소드: .accept() 16.2.2. Supplier 매개 값: X 리턴 값: O (타입: T) Consumer와 반대로 값을 만들기만하고 소비하지 않음 내부 메소드: .get() 16.2.3. Function 매개 값:.. 2022. 3. 22.
[JAVA] 15 - 1 컬렉션 프레임워크 15.1. 컬렉션(Collection) 프레임워크란? 다수의 객체를 저장하고 효율적으로 추가, 삭제, 검색할 수 있도록 구현된 인터페이스와 클래스들을 말한다. 주요 인터페이스로 List, Set, Map이 있다. 배열도 다수의 객체를 저장할 수 있다. 하지만, 저장할 수 있는 크기가 고정적이며, 중간 인덱스의 자료를 삭제했을 때 빈 곳이 생기기도 한다. 이로 인해 고정적 크기의 연속된 객체를 저장하는 것은 좋지만, 유동적인 크기를 갖는 객체 저장에는 적합하지 않을 수 있다. 컬렉션이란? 사전적 의미로 요소를 수집해서 저장하는 것을 말한다. 15.1.1. List 특징 순서를 유지하고 저장한다. 중복 저장이 가능하다. 구현 클래스 ArrayList Vector (Thread safe) LinkedList .. 2022. 3. 22.
[JAVA] 레드블랙 트리 정리 레드-블랙 트리 이진 트리의 약점을 극복하기 위해 새로운 규칙을 추가하여 나온 이진 트리이다. 자바의 TreeSet과 TreeMap은 레드-블랙 트리를 베이스로 한 구현을 사용한다. 레드-블랙 트리의 조건 모든 트리의 노드에 검은색 혹은 빨간색을 색칠한다. 루트 노드는 항상 검은색이다. 모든 리프 노드 들은 검은색이다. 빨간색 노드의 자식은 양쪽 다 항상 검은색이다. 4.1. 즉, 빨간색 노드는 연달아 나타날 수 없다. 4.2. 이 규칙을 지키면, 검은색 노드만이 빨간색 노드의 부모가 될 수 있다. 루트 노드에서 어떠한 자식 노드를 타고 가던지 리프 노드에 도달했을 때 항상 같은 수의 검은색 노드를 만나게 된다. 리프 노드 (leaf node) 란? 자식 노드가 더 이상 존재하지 않는 노드를 말한다. 리.. 2022. 3. 22.
[JAVA] 14 - 1 람다식 14.1. 람다식이란? 원래 함수적 프로그래밍 언어에서 쓰이던 개념이다. 병렬 처리와 이벤트 지향 프로그래밍에 적합하다. 자바8부터 지원한다. 익명함수를 생성하기 위한 식으로 객체 지향 언어보다는 함수 지향 언어에 가깝다. 컬렉션 요소의 필터링, 매핑 등 작업을 쉽게 만들어준다. 매개변수를 지닌 코드 블록으로, 런타임 시에 익명 구현 객체를 생성한다. 수학자 Alonzo Church가 발표한 람다 계산법에서 사용된 식으로, John McCarthy가 프로그래밍 언어에 도입했다. 14.2. Runnable 을 람다식으로 표현하는 예제 14.2.1. 람다식 전 Runnable runnable = new Runnable() { @Override public void run() { ... } } 14.2.2. .. 2022. 3. 22.
[JAVA] 13 - 1 제네릭 13.1. 제네릭이란? 클래스의 인터페이스, 메소드를 정의할 때, 타입(type)을 파라미터로 사용할 수 있도록 해준다. JAVA 5 부터 생겼다. public T genericMethod(T genericTypeObject) 13.2. 제네릭을 사용하는 이유 13.2.1. 컴파일 시 강한 타입 체크가 가능하다. 컴파일 시에 미리 타입을 강하게 체크하여 에러를 사전에 방지할 수 있다. 13.2.2. 타입 변환(casting)을 제거한다. 제네릭 이전 List list = new ArrayList(); list.add("hello"); String str = (String) list.get(0); // 타입 변환이 필요하다. 제네릭 이후 List list = new ArrayList(); list.add(.. 2022. 3. 22.
[JAVA] 12 - 3 스레드(작업 완료 통보 방법) 12.24. 스레드풀 스레드의 블로킹 방식 작업 완료 통보 ExecutorService의 .submit() 메소드는 스레드 작업으로 준 Runnable 혹은 Callable 작업을 스레드 풀의 작업 큐에 저장하고 즉시 Future 객체를 반환한다. Future submit(Runnable task) Future submit(Runnable task, V result) Future submit(Callable task) 12.24.1. Future 객체 Future 객체는 단순히 작업 결과를 받는 것이 아니라 작업이 완료될 때까지 기다렸다가 최종 결과를 얻는데 사용된다. Future를 지연 완료(pending completion) 객체라고도 한다. 12.24.2. Future.get() Future의 .g.. 2022. 3. 22.
[JAVA] 12 - 2 스레드(스레드 상태 제어, 스레드 종료, 스레드 그룹, 스레드풀 생성, 스레드풀 작업 생성 및 처리) 12.13. 스레드 상태 제어 이전엔 스레드 상태에 대해 알아봤는데, 해당 스레드 상태를 제어하는 메소드에 대해 알아보자. 12.13.1. 메소드와 상태 다이어그램 취소선으로 표기된 메소드는 Deprecated 메소드들이다. 12.14. Thread 내부 상태제어 메소드 12.14.1. interrupt() 일시 정지 상태의 스레드에서 InterruptedException 예외를 발생시켜 예외처리 코드에서 실행 대기 상태로 가거나 종료 상태로 갈 수 있도록 한다. 12.14.2. sleep(long millis[, int nanos]) 주어진 시간 동안 스레드를 일시 정지 상태로 만든다. (TIMED_WAITING) 주어진 시간이 지나면 자동적으로 실행 대기 상태가 된다. 일시 정지 상태에서 주어진 시간.. 2022. 3. 22.
728x90