BACK/JAVA 37

[JAVA] char단위 입출력- Reader/Writer

HTML 삽입 미리보기할 수 없는 소스 char단위의 입출력은 문자열 입출력을 위해 특화된 기법이다. char단위로 입출력을 수행하는 기본 클래스는 Reader와 Writer추상 클래스다. Reader클래스의 자식 클래스에는 FileReader, BufferedReader, InputStreamReader가 있고, Wirter의 자식 클래스에는 FileWriter, BufferedWriter, OutputStreamWriter, PrintWriter가 있다. 여기서 InputStreamReader와 OutputStreamReader 클래스는 byte단위의 데이터 입출력 클래스인 InputStream과 OutputStream을 char 단위의 입출력 클래스인 Reader와 Writer로 변환하는 클래스다...

BACK/JAVA 2022.10.23

[JAVA] byte단위 입출력- InputStream/OutputStream

자바의 입출력은 크게 byte 단위의 입출력과 char 단위의 입출력으로 나눌 수 있다. 우선 byte단위의 입출력인 InputStream과 OutputStream 추상클래스에 대해 포스팅하고 다음 포스팅에서 char 단위의 입출력을 포스팅한다. InputStream 입력으로 InputStream 추상 클래스가 사용된다. InputStream을 상속해 추상 메서드를 구현한 자식 클래스에는 FileInputStream, BufferedInputStream, DataInputStream이 있다. FileInputStream으로 InputStream 객체 생성하기 // 입력 파일 생성 File inFile = new File("src/files/FileInput-Stream1.txt"); // FileInpu..

BACK/JAVA 2022.10.23

[JAVA] 자바로 파일 관리하기(File 클래스)

자바의 File 클래스는 파일과 폴더를 관리하는 클래스이다. 파일 객체를 생성하는 시점에서는 실제 파일의 존재 유무는 문제가 되지 않는다. 다만 해당 경로에 실제 파일이 존재하지 않을 때 File 객체로 파일을 읽으려고 하면 FileNotFoundException이 발생한다. 파일 객체 생성하기 File tempDir = new File("D:/temp"); // 폴더 객체 생성 if(!tempDir.exists()) // 폴더가 없을 때 tempDir.mkdir(); // 실제 폴더 생성 System.out.println(tempDir.exists()); // true // 파일 객체 생성 File newFile = new File("D:/temp/newFile.txt"); if(!newFile.exi..

BACK/JAVA 2022.10.23

[JAVA] 람다식(메서드 구현 축약, 메서드 참조, 생성자 참조)

람다식이란? 기존의 객체 지향 프로그램 체계 안에서 함수형 프로그래밍을 가능하게 하는 기법 단 하나의 추상 메서드만을 포함하는 인터페이스를 함수형 인터페이스라 하고, 이 함수형 인터페이스의 호출 및 기능을 구현하는 방법을 새롭게 정의한 문법이다. 익명 이너 클래스의 축약된 형태라고 볼 수 있고, 단 하나의 추상 메서드만을 가진 함수형 인터페이스만 람다식으로 표현할 수 있다. 1.구현 메서드의 약식 표현 인터페이스 구현 메서드 -> 람다식 변환 (입력매개변수) -> { // 메서드 내용 } 함수형 인터페이스의 객체를 생성하기 위한 람다식 표현 방법 interface A{ void method1(); } interface B{ void method2(int a); } interface C{ int metho..

BACK/JAVA 2022.10.02

[JAVA] 쓰레드의 6가지 상태

NEW 처음 객체 생성된 후 상태 RUNNABLE start() 메서드로 실행한 후 상태 실행과 실행 대기를 반복하면서 CPU를 다른 쓰레드들과 나눠 가짐 일시정지 상태로 전환 가능 (TIMED_WAITING, BLOCKED, WAITING) TERMINATED run() 메서드 종료 후 상태 TIMED_WAITING Thread.sleep(long millis) 또는 join(long millis) 호출: RUNNABLE -> TIME_WAITING 일시정지 시간 종료 또는 interrupt() 호출 : TIMED_WAITING -> RUNNABLE BLOCKED 동기화 메서드 또는 동기화 블록을 실행하기 위해 먼저 실행 중인 쓰레드의 실행 완료를 기다리는 상태 앞의 쓰레드의 동기화 영역 수행이 완료되..

BACK/JAVA 2022.08.26

[JAVA] 프로그램, 프로세스, 쓰레드 개념

컴퓨터를 이루는 주요 구성 요소에는 중앙 처리 장치(CPU), 메모리, 하드디스크가 있다. CPU- 연산을 수행함으로써 실제 프로그램을 실행하는 장치 하드디스크- 데이터의 저장 역할을 수행 메모리- 저장된 데이터를 CPU로 보내는 역할 하드디스크에 저장된 프로그램이 실행되기 위해서는 먼저 프로그램을 메모리로 로딩하는 과정을 거쳐 프로세스 상태로 만들어야 한다. 프로그램- 하드디스크에 저장된 파일들의 모임 프로세스- 메모리에 로딩된 프로그램 멀티 프로세스- 동일한 프로그램을 메모리에 여러번 로딩하면 여러개의 프로세스가 동작하는 것 쓰레드란? 프로세스(process) 내에서 실제로 작업을 수행하는 CPU 수행 단위. CPU를 사용하는 최소 단위라고 할 수 있다. 실제 CPU를 사용하는 것은 프로세스 내부의 ..

BACK/JAVA 2022.08.18

[JAVA] 쓰레드의 동기화(메서드 동기화, 블록 동기화)

동기화란 하나의 작업이 완전히 완료된 후 다른 작업을 수행하는 것이다. 멀티쓰레드를 사용할 땐 동기화가 필요하다. 동기화를 사용하지 않았을 때 문제 발생 // 공유 객체 class MyData{ int data = 3; public void plusData(){ int mydata=data; // 데이터 가져오기 try {Thread.sleep(2000);} catch(InterruptedException e){} data=mydata+1; // 2초 후에 값을 1만큼 증가 } } // 공유 객체를 사용하는 쓰레드 class PlusThread extends Thread{ MyData myData; public PlusThread(MyData myData){ // 생성자의 매개변수로 MyData 객체를 ..

BACK/JAVA 2022.08.10

[JAVA] 쓰레드의 속성

현재 쓰레드 객체 참좃값 얻어오기(쓰레드 객체를 참조할 수 없을 때) static Thread Thread.currentThread() 실행 중인 쓰레드의 개수 가져오기 static int Thread.activeCount() 쓰레드 이름 설정하기 String setName(String name) 쓰레드 이름 가져오기 String getName() 쓰레드 객체의 우선순위 정하기 void setPriority(int priority) 쓰레드 객체의 우선순위 가져오기 int getPriority() 데몬 쓰레드(일반 쓰레드가 모두 종류되면 함께 종료되는 쓰레드) 만들기 void setDeamon(boolean on) * 데몬 설정은 반드시 쓰레드를 실행하기전(start() 메서드 호출전)에 설정 해야 함 데..

BACK/JAVA 2022.08.09

[JAVA] 쓰레드 생성 및 실행(Thread클래스, Runnable 인터페이스)

쓰레드를 생성하는 방법은 크게 두가지로 나눌 수 있다. 1. Thread클래스를 상속받아 run() 메서드를 오버라이딩 2. Runnable 인터페이스 구현 객체를 생성한 후 Thread 생성자로 Runnable 객체 전달 2가지 방법 모두 run() 메서드를 재정의하고 있고, 결과적으로 Thread 객체를 생성한다. 이렇게 생성한 쓰레드를 실행하는 방법은 Thread 객체 내의 start() 메서드를 호출하는 것이다. 방법1 // Thread 클래스 상속해 클래스를 생성한 후 쓰레드 2개 생성 class SMIFileThread extends Thread{ @Override public void run(){ String[] strArray={"하나", "둘", "셋", "넷", "다섯"}; try{Th..

BACK/JAVA 2022.08.08

[JAVA] 추상 클래스 (특징, 객체 생성 방법)

추상 클래스의 정의 일단 추상 메서드는 메서드의 본체가 완성되지 않은 미완성 메서드를 말한다. abstract void abc(); 추상 메서드를 1개 이상 포함하고 있는 클래스는 반드시 추상 클래스로 정의돼야 한다. 추상 클래스는 class 키워드 앞에 abstract를 붙여 표현한다. abstract class A{ abstract void abc(); void bcd(){ //... } } 추상 클래스의 특징 내부의 미완성 메서드 때문에 객체를 직접 생성할 수 없다. 힙 메모리에 생성되는 객체는 내부 요소가 미완성인 상태로 들어갈 수 없기 때문이다. 하지만 이 추상 클래스를 상속한 자식 클래스를 생성하면 그 자식 클래스로는 객체를 생성할 수 있다. 추상 클래스를 상속하는 자식 클래스는 부모에게 상속..

BACK/JAVA 2022.08.04