자바에서는 File 클래스로 파일과 디렉터리에 접근할 수 있다 import java.io.*; public class Main { public static void main(String args[]) throws IOException { File file = new File("./eroom.txt"); System.out.println(file.getPath()); System.out.println(file.getParent()); System.out.println(file.getCanonicalPath()); System.out.println(file.canWrite()); } } getPath : 추상 경로를 문자열로 반환 getParent : 상위 경로를 문자열로 반환. 경로 이름이 상위 디렉터리의..
문자 기반 스트림 문자 데이터를 다룰 때 사용 여러 종류의 인코딩과 자바에서 사용하는 유니코드 간의 변환을 자동으로 처리 FileReader : 인코딩 -> 유니코드 FileWriter : 유니코드 -> 인코딩 FileWriter 바로 사용법을 알아보자 import java.io.FileWriter; import java.io.IOException; public class Main { public static void main(String args[]) { try { String fileName = "eroomFileWriter.txt"; FileWriter writer = new FileWriter(fileName); String str = "이룸 File Writer 테스트!"; writer.writ..
바이트 기반 스트림 ( 입출력 단위가 1byte) FileOutputStream 파일 생성 import java.io.FileOutputStream; public class Main { public static void main(String[] args) { try { FileOutputStream fileOutput = new FileOutputStream("eroom.txt"); String word = "E-room"; byte b[] = word.getBytes(); fileOutput.write(b); fileOutput.close(); } catch (Exception e) { System.out.println(e); } } } FileInputStream 파일을 읽어올 때 사용 FileOut..
모든 타입의 객체를 담을 수 있는 Wrapper 클래스 Optional NullPointerException(NPE : null 값으로 인해 에러가 발생하는 현상)을 객체 차원에서 효율적으로 방지하고자 도입 public final class Optional { private final T value; // T타입의 참조변수 } of(), ofNullable() Optional opt1 = Optional.ofNullable(null); // null일 가능성이 있다면 사용 Optional opt2 = Optional.ofNullable("123"); System.out.println(opt1.isPresent()); //Optional 객체의 값이 null인지 여부를 리턴 System.out.printl..
스트림 생성 스트림 사용 시 주의할 점 데이터 소스로부터 데이터를 읽기만 하고 변경은 하지 않는다 스트림은 일회용이다. -> 한번 사용 시 닫히므로 필요시 다시 만들어야 됨 Collection 인터페이스에는 stream()이 정의되어 있다 -> Collection을 구현한 객체들(List, Set 등)은 모두 stream()을 이용해 스트림을 생성할 수 있다 .stream() // List로부터 스트림을 생성 List list = Arrays.asList("a", "b", "c"); // List생성 Stream listStream = list.stream(); // List로 Stream을 생성 listStream.forEach(System.out::prinln); //스트림의 모든 요소를 출력. 배열..
배열, 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자 스트림의 특징 1. 선언형 프로그래밍 "어떻게" 수행하는지보다는 "무엇을" 수행하는지에 관심을 두는 프로그래밍 패러다임 -> 가독성이 높다 일반적인 방법 // List에 있는 숫자들 중에서 4보다 큰 짝수의 합계 구하기 List numbers = List.of(1, 3, 6, 7, 8, 11); int sum = 0; for (int number : numbers) { if (number > 4 && (number % 2 == 0)) { sum += number; } } System.out.println("# 명령형 프로그래밍 : " + sum); stream을 이용한 방법 // List에 있는 숫자들 중에서 4보다 ..
메서드를 하나의 식(expression)으로 표현한 것 람다식은 매우 간결하면서 명확하게 표현할 수 있다는 큰 장점이 있다 람다식의 기본 문법 기본적으로 반환 타입과 이름 생략 가능 익명 함수(anonymous function)이라고도 불림 실행문이 하나만 존재할 때 중괄호 생략 가능 //기존 메서드 표현 방식 void sayhello() { System.out.println("HELLO!"); } //위의 코드를 람다식으로 표현한 식 () -> System.out.println("HELLO!") 추가로 알아볼 것 : 함수형 인터페이스, 메서드 레퍼런스
특정 코드를 사용하는 '프로그램'에게 정보를 전달하는 것 애너테이션이 하는 역할은 주석과 거의 흡사하다. 다만 대상이 다를 뿐이다. 주석은 개발자의 이해를 돕기 위해서 사용하지만 애너테이션은 프로그램에게 유용한 정보를 제공하기 위해 사용한다. 애너테이션의 주요 역할 컴파일러에게 문법 에러를 체크하도록 정보를 제공한다 프로그램을 빌드할 때 코드를 자동으로 생성할 수 있도록 정보를 제공한다 런타임에 특정 기능을 실행하도록 정보를 제공한다 사용 예시 @Test // 아래 메서드가 테스트 대상임을 테스트 프로그램에게 알리는 애너테이션 public void run() {...생략...} public void stop() {...생략...} 애너테이션의 종류 표준 애너테이션 : 자바에서 기본적으로 제공하는 애너테이..
Map 키(key)와 값(value)으로 구성된 객체(Entry)를 저장하는 구조 -> 키와 값으로 구성된 엔트리 객체가 모여있는 구조 키는 중복 저장이 불가능하다 -> 값을 식별하기 위해 값은 중복 저장이 가능하다 HashMap, Hashtable, TreeMap, SortedMap 등 기능 리턴 타입 메서드 설명 객체 추가 Object put (Object key, Object value) 주어진 키로 값을 저장합니다. 해당 키가 새로운 키일 경우 null을 리턴하지만, 동일한 키가 있을 경우에는 기존의 값을 대체하고 대체되기 이전의 값을 리턴합니다. 객체 검색 boolean containsKey (Object key) 주어진 키가 있으면 true, 없으면 false를 리턴합니다. boolean c..