본문 바로가기

자바의정석

Java 입출력(I/O) - 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램 간 데이터를 주고 받는 것 - 자바에서는 java.io 패키지를 통해서 많은 종류의 입출력 관련 클래스들을 제공함 1. 스트림(stream) - 자바에서 입출력을 수행(데이터 운반)에 사용되는 연결통로 - 스트림은 단방향 통신만 가능, 그러므로 입출력을 동시에 사용하기 위해서는 2개의 스트림 필요 - 스트림은 먼저 보낸 데이터를 먼저 받음(큐의 FIFO구조 같은 형태) - 중간에 건너뜀 없이 연속적으로 데이터를 주고 받음 2. 바이트 기반 스트림 - 바이트 단위로 데이터를 전송 - 입출력 대상과 입/출력 목적에 따라 해당 스트림을 선택해서 사용 입출력 대상 입력 스트림 출력 스트림 파일 FileInputStream FileOutputStream 메모리.. 더보기
Java Optional<T> - T 타입의 객체를 감싸는 래퍼 클래스 1. Optional 객체 생성 - of()로 생성 String str = "abc"; Optional optVal = Optional.of(str); Optional optVal = Optional.of("abc"); Optional optVal = Optional.of(new String("abc")); - 참조변수의 값이 Null일 가능성이 있는 경우 ofNullable()를 사용하여 생성 Optional optVal = Optional.of(null); // NullPointerException 발생 Optional optVal = Optional.ofNullable(null); // OK - Optional 타입의 참조변수를 기본값으로 초기화 하는 경우,.. 더보기
Java 스트림(stream) - 다양한 데이터 소스(컬렉션, 배열, 람다식, 난수 스트림 등)를 표준화된 방법으로 다루기 위한 것 - 스트림 만들기 -> 중간연산(0~n 번) -> 최종연산(1번)으로 결과를 얻음 1. 스트림의 특징 1) 데이터 소스로부터 데이터를 읽기만 할 뿐 변경하지 않음 - 필요시 정렬된 결과를 컬렉션이나 배열에 담아 반환 가능 2) Iterator처럼 일회용(필요한 경우 다시 스트림 생성해야 함) 3) 최종 연산 전까지 중간연산이 수행되지 않음 - 지연된 연산 IntStream intStream = new Random().ints(1, 46); // 1~ 45 범위의 무한 스트림 IntStream.distinct().limit(6).sorted() // 중간연산, 수행되지 않고 수행해야할 내용을 지정하는 것 .. 더보기
Java 람다(Lambda) Java는 객체지향프로그래밍(OOP) 언어이지만 JDK1.8부터 함수형 언어의 기능이 더해짐 함수형 언어: Haskell, Evlang, Scala 등 빅데이터 처리를 위해 많이 사용되고 있음 1. 람다식(Lambda Expression) - 메서드를 간단한 식(expression)으로 표현한 것 - 메서드를 람다식으로 표현 시 이름과 반환값이 없어지므로 익명 함수(anonymous function)라고도 함 2. 람다식 작성하기 1) 반환타입, 메서드명 제거 // 메서드 int max(int a, int b) { } // 람다식 (int a, int b) { } // 1. 반환타입, 메서드명 제거 2) 매개변수 선언부와 몸통'{}' 사이에 화살표 '->' 추가 // 메서드 int max(int a, i.. 더보기
Java 스레드(thread) 1. 프로세스(Process) 실행 중인 프로그램, 자원(Resources)과 스레드로 구성 2. 스레드(Thread) - 프로세스 내에서 실제 작업을 수행하는 것, 모든 프로세시는 하나의 스레드를 갖음 - 경량 프로세스(LWP, Light-Weight Process)라고 부르기도 함 3. 스레드의 구현 1) Thread 클래스 상속 받는 방법 // Thread 클래스를 상속 class MyThread extends Thread { public void run() { // Thread클래스의 run()메서드 오버라이딩 // 작업 내용 } } // 실행 MyThread t1 = new MyThread(); // 스레드 생성 t1.start(); // 스레드의 실행 2) Runnable 인터페이스 구현하는 .. 더보기
Java 애너테이션(annotation)이란? - 애너테이션(annotation): 주석, 주해, 메모의 뜻이 있음 - 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보 제공 1. 표준 애너테이션 - JDK에서 제공하는 애너테이션은 Java.lang.annotation 패키지에 포함되어 있음 애너테이션 설명 @Overrid - 컴파일러에게 메서드를 오버라이딩하는 것이라고 알림 @Deprecated - 앞으로 사용하지 않을 것을 권장하는 대상에 붙임 @SuppressWarnings - 컴파일러의 특정 경고 메시지가 나타나지 않게함 @SafeVarargs - 지네릭스 타입의 가변인자에 사용(JDK1.7) @FuctionalInterface - 함수형 인터페이스라는 것을 알림(JDK1.8) @Native - native 메서드에서 참조되는 상.. 더보기
Java 열거형(enum) 관련된 상수들을 묶어 놓은 것 Java는 타입에 안전한 열거형을 제공 1. 열거형의 정의와 사용 1) 열거형의 정의 방법 enum 열거형명 { 상수명1, 상수명2, ... , 상수명n} 2) 열거형 타입의 변수 선언과 사용 enum Direction { EAST, SOUTH, WEST, NORTH } class Unit { int x, y; Direction dir; // 열거형 인스턴스 변수 선언 void init() { dir = Direction.EAST // 열거형 Direction의 상수 EAST로 초기화 } } 3) 열거형 상수의 비교에 ==와 compareTo() 사용 - ''와 같은 비교연산자는 사용 불가 2. 열거형의 조상 - java.lang.Enum - 모든 열거형은 Enum의 자손이.. 더보기
[Java] 제네릭(Generics) 1. 제네릭(generics) 1) 정의컴파일 시 타입을 체크해주는 기능(compile-time type check) (JDK1.5부터)클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법 2) 장점객체 타입을 컴파일 시 체크할 수 있으므로 런타임 에러를 줄일 수 있음 👉🏻 안정성을 높임저장된 객체를 꺼낼 때 형변환이 필요 없음(위 두 가지 장점으로 인하여) 타입체크와 형변환 생략이 가능하므로 코드가 간결해짐 2. 제네릭의 용어1) 제네릭 클래스, T의 Box 또는 T Box라고 읽음class Box // 지네릭 클래스 T의 Box 선언 또는 지네릭 클래스 T Box 선언 2) 원시 타입(raw type)class Box // Box가 원시 타입 3) 다이아몬드 연산자'' 꺽쇠 괄호 키워드를 .. 더보기