자바의 정석 14

27. File

File : 파일은 가장 많이 사용되는 입출력 대상이다. 자바에서는 File클래스를 통해서 파일과 디렉토리를 다룬다. 그래서 File 인스턴스는 파일 일 수도 있고 디렉토리일 수도 있다. 💡File의 생성자와 메소드 생성자 / 메서드 설 명 File(String fileName) 주어진 문자열(fileName)을 이름으로 갖는 파일을 위한 File인스턴스를 생성한다. 파일 뿐만 아니라 디렉토리도 같은 방법으로 다룬다. 여기서 fileName은 주로 경로(path)를 포함해서 지정해주지만, 파일 이름만 사용해도 되는데 이 경우 프로그램이 실행되는 위치가 경로(path)로 간주된다. File(String pathName, String fileName) File(File pathName, String file..

26. 표준 입출력과 RandomAccessFile

표준입출력 : 표준입출력은 콘솔을 통한 데이터 입력과 콘솔로의 데이터 출력을 의미한다. 자바에서는 표준입출력을 위해 3가지 입출력 스트림을 제공하는데, 이들은 자바 어플리케이션 실행과 동시에 자동생성되기때문에 개발자가 별도로 코드를 작성하지 않고도 사용이 가능하다. 스트림 명 설명 System.in 콘솔로부터 데이터를 입력받을때 사용한다. System.out 콘솔로 데이터를 출력할때 사용한다. System.err 콘솔로 데이터를 출력할때 사용한다. ✔️ in, out, err는 System클래스에 선언된 클래스 변수 이다. ✔️ in, out, err의 선언부분의 타입은 InputStream과 PrintStream이지만 실제로는 버퍼를 이용하는 BufferedInputStream과 BufferedOutp..

25. 문자기반의 보조스트림

1️⃣ BufferedReader와 BufferedWriter - 버퍼를 이용해서 입출력의 효율을 높일 수 있도록 해주는 보조스트림. - BufferedReader의 readLine() 메소드를 사용하면 데이터를 라인 단위로 읽을 수 있다. - BufferedWriter는 newLine()이라는 줄바꿈 해주는 메서드를 가지고 있다. 예시 ) readLine()을 이용해 파일을 라인단위로 읽은 다음 ";"을 포함하고 있는 라인을 출력해보자. import java.io.*; public class BufferedReaderEx1 { public static void main(String[] args) { try { FileReader fr = new FileReader("/Users/user/Document..

22. 스트림의 최종연산

스트림의 최종연산 : 스트림이 제공하는 연산은 중간 연산과 최종 연산으로 분류할 수 있다. ✔️ 중간연산 : 연산결과를 스트림으로 반환하기 때문에 중간 연산을 연속해서 연결 할 수 있다. ✔️ 최종연산 : 스트림의 요소를 소모하면서 연산을 수행하므로 단 한번만 연산이 가능하다. 연산의 결과는 스트림의 요소의 합과 같은 단일 값이거나, 스트림의 요소가 담긴 배열 또는 컬렉션일 수 있다. forEach() : 스트림의 요소를 소모하는 최종연산이다. 반환타입이 void이므로 스트림의 요소를 출력하는 용도로 많이 사용된다. 최종 연산 설명 void forEach(consumer

21. fork & join 프레임워크

fork & join 프레임워크 : 하나의 작업을 작은 단위로 나눠서 여러 쓰레드가 동시에 처리하는 것을 쉽게 만들어주는 프레임워크이다. jdk1.7부터 추가 되었다. * RecursiveAction과 RecursiveTask 클래스 사용하려면 수행할 작업에 따라 RecursiveAction과 RecursiveTask, 두 클래스 중에서 하나를 상속받아 구현해야한다. RecursiveAction 반환값이 없는 작업을 구현할 때 사용 RecursiveTask 반환값이 있는 작업을 구현할 때 사용 // 두 클래스 모두 compute()라는 추상 메서드를 가지고 있는데, 상속을 통해 이 메서드를 구현하면 된다. public abstract class RecursiveAction extends ForkJoinT..

20. volatile

volatile : 변수의 앞에 붙이면 cpu의 코어가 변수의 값을 읽어올 때 캐시가 아닌 메모리에서 읽어서 캐시와 메모리간의 값의 불일치가 해결된다. * volatile이 필요한 이유 멀티 코어 프로세서에서는 코어마다 별도의 캐시를 가지고 있는데 코어는 메모리에서 읽어온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업한다. 다시 같은 값을 읽어올 때에는 먼저 캐시에 있는지 확인하고 없을때만 메모리에서 읽어온다. 그러다가 도중에 메모리에 저장된 변수의 값이 변경되어도 캐시에 저장된 값이 갱신되지 않아서 메모리에 저장된 값이 다른 경우가 발생한다. * volatile의 사용방법 //boolean stopped = false; //volatile volatile boolean stopped = false; ..

19. 쓰레드의 동기화

쓰레드의 동기화 : 하나의 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것. * 사전에 알아야할 개념 * 잠금(락,lock) : 모든 객체가 한개씩 갖고 있으며, 어떤 쓰레드가 lock을 가지면 다른 쓰레드들은 lock을 얻을 때까지 기다린다. * 임계영역(critical section) : 공유 데이터를 사용하는 코드 영역, lock을 획득한 하나의 쓰레드가 코드를 수행할 수 있는 영역 synchronized를 이용한 동기화 : 두 가지 방법있는데, 공통점은 lock의 획득과 반납이 모두 자동적으로 이루어진다는 것이다. 그래서 사용자는 임계영역만 설정해주면 된다. 1. 메서드 전체를 임계영역으로 지정 : 쓰레드는 synchronized메서드가 호출된 시점부터 해당 메서드가 포함된 객체..

17. 열거형(enums)

열거형 : 열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다. JDK1.5부터 새로 추가되었고, 자바의 열거형은 값뿐만 아니라 타입도 관리하기 때문에 논리적인 오류를 줄일 수 있다. 또한 기존에는 상수의 값이 바뀌면 해당 상수를 참조하는 모든 소스를 다시 컴파일 해야했지만 열거형 상수를 사용하면, 다시 컴파일 하지 않아도 된다. * 열거형의 정의 enum 열거형이름 { 상수명1, 상수명2, ...} * 열거형의 사용방법 enum Direction {EAST, SOUTH, WEST, NORTH} public class Unit { int x, y; Direction dir; void init(){ dir = Direction.EAST; } void move..

14.HashSet

HashSet : Set인터페이스를 구현한 가장 대표적인 컬렉션 * HashSet의 특징 1. 중복을 허용하지 않는다. 2. 저장순서를 유지하지 않으므로 저장순서를 유지하고자 한다면 LinkedHashSet을 사용해야한다. 3.add와 contain메소드의 시간복잡도는 O(1), next의 시간복잡도는 O(h/n)이다. * O(h/n)의 이유는 엘리먼트에 비해 해시버킷의 수가 늘어나면 해시버킷으로 사용하는 배열의 대부분은 비어있게 되고, 엘리먼트가 담겨 있는 해시버킷을 찾기 위해 매번 비어있는 해시버킷을 방문해야하기 때문에 h 가 들어갔다. 또한 엘리먼트의 숫자가 늘어나면 해시버킷이 비어있을 가능성이 줄어들게 되고, O(1)에 근접하게 된다. 이런 의미에서 H/N 이라는 시간복잡도를 써 놓은 것 같다. ..

10. 래퍼 클래스(wrapper 클래스)

래퍼 클래스(wrapper) - 래퍼클래스란 매개변수로 객체를 요구하거나 기본형 값이 아닌 객체로 저장해야할 때, 객체간의 비교가 필요할 때 등 기본형 변수도 어쩔 수 없이 객체로 다뤄야 하는 경우가 있는데 그 때 사용되는 것이다. 기본형 래퍼클래스 생성자 boolean Boolean Boolean (blooean value) Boolean (String value) char Character Character (String value) byte Byte Byte (byte value) Byte (String value) short Short Short (short value) Short (String value) int Integer Integer (int value) Integer (String va..

728x90
반응형