Record 클래스 Java 14부터 도입된 Record 클래스는 불변 데이터를 객체 간에 전달하는 작업을 간단하게 만들어준다. Record 클래스를 사용하면 불필요한 코드를 제거할 수 있고, 적은 코드로도 명확한 의도를 표현할 수 있다라고 합니다. Record의 특징으로는 멤버변수는 private final로 선언된다 필드별 getter가 자동으로 생성된다 모든 멤버변수를 인자로 하는 public 생성자를 자동으로 생성한다 —> (@allargsconstructor와 유사하지만, record는 불변 데이터를 다루므로 생성자가 실행될 때 인스턴트 필드를 수정할 수 없다) equals, hashcode, toString을 자동으로 생성한다 기본생성자는 제공하지 않으므로 필요한 경우 직접 생성해야 한다 HelloWorldCon..
회원관리 프로그램 작성하기 회원 관리 프로그램 작성하기 프로그램을 실행하면 /tmp/users.dat 파일에서 회원정보를 불러온다. 해당 파일이 없으면 읽어오지 않는다. 프로그램 종료 시 메모리에 있는 회원정보를 /tmp/users.dat에 저장한다. 프로그램을 강제 종료 시 입력된 회원정보는 저장되지 않을 수 있다. 기능 1. 회원 등록 2. 회원목록 보기 3. 회원정보 수정 4. 회원정보 삭제 5. 종료 User package com.example.IO; import java.io.Serializable; public class User implements Serializable { private String email; private String name; private int birthYear; public User(Str..
채팅 프로그램 만들어보기 ChatThread package com.example.chat2; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ChatThread extends Thread{ private String name; private BufferedReader br; private PrintWriter pw; private Socket ..
네트워크 프로그래밍 - 2 웹서버의 동작 동시에 여러 번 동작한다. -- 클라이언트가 접속할 때까지 대기 -- 클라이언트가 접속하면 연결이 된다. -- 클라이언트가 보내주는 정보를 읽어들인다.(빈줄까지!) 첫줄(GET /) 헤더들 (여러 줄) 헤더명:헤더값 빈줄 서버는 응답을 첫줄(200 OK) 헤더들(Body의 크기) 빈줄 Body 내용이 전달된다 연결이 끊어진다. package com.example.webserver; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class WebServer { public static void main(String[] args) throws Exception{ // 클라이언트가 접속할 때까지 대기할..
썸네일 네트워크 프로그래밍 - 1 IP주소와 Port 도메인 네임 서버(Domain Name Server: DNS) 도메인 주소를 IP로 변환한다. nslookup 도메인주소 -> 이 명령으로 도메인에 해당하는 IP주소를 알아낼 수 있다. IP주소 알아내기 InetAddress로 알아낸다. 사용자 컴퓨터의 IP주소 알아내기 InetAddress ia = InetAddress.getLocalHost(); System.out.println(ia.getHostAddress()); google의 IP주소 알아내기 InetAddress[] iaArr = InetAddress.getAllByName("www.google.com"); for(InetAddress ia : iaArr){ System.out.println(ia.getHostAddress..
썸네일 쓰레드(Thread) 개념, 실행방법 병렬화 시 고려해야 할 것들 메모리 속도, CPU 캐시 메모리, 디스크, 네트워크, 커넥션 등등 때로는 순차적 실행이 병렬실행보다 빠른 경우가 있다. 동시 실행에 따른 오버헤드가 없고 단일 CPU 알고리즘은 하드워드 작업에 더 친화적일 수가 있기 때문이다. 암달의 법칙(Amdahl's law) 암달의 저주라고도 불리며 컴퓨터 시스템의 일부를 개선할 때 전체적으로 얼마만큼의 최대 성능 향상이 있는지를 계산할때에 사용된다. 병렬 컴퓨팅을 할 경우 일부 병렬화 가능한 작업들은 사실상 계산에 참여하는 컴퓨터의 갯수에 비례하여 속도가 늘어난다. 이러한 경우 암달의 법칙에 의해 전체 수행시간의 개선효과는 병렬화가 불가능한 작업들의 비중에 크게 영향을 받게 된다. 즉 아무리 컴퓨터의 갯수가 늘어나도 속도의 한계는 정..
Java IO 5 - ObjectInputStream, ObjectOutputStream ObjectInputStream, ObjectOutputStream 직렬화 가능한 대상을 읽고 쓸 수 있다. 직렬화 가능한 대상은 기본형 타입 or java.io.Serializable 인터페이스를 구현하고 있는 객체이다. package com.example.IO; import java.io.Serializable; public class User implements Serializable { private String email; private String name; private int birthYear; public User(String email, String name, int birthYear) { this.email = email; this.name = name; this.birthYear =..
Java IO 4 - DataInputStream, DataOutputStream DataInputStream, DataOutputStream 기본형 타입과 문자열을 읽고 쓸 수 있다. public class IOExam10 { public static void main(String[] args) throws Exception{ // 문제 이름, 국어, 영어, 수학, 총첨 평균점수를 /tmp/score.dat 파일에 저장하시오 String name ="choi"; int kor = 90; int eng = 80; int math = 85; double total = kor + eng + math; double avg = total / 3.0; DataOutputStream out = new DataOutputStream(new FileOutputStream("/tmp/score.dat..
썸네일 Java IO 3 -Reader, Writer Reader, Writer 추상클래스 char단위 입출력 클래스는 Reader, Writer의 후손이다. 1. Reader 클래스 - 문자 기반 입력 스트림의 최상위 추상 클래스 - 객체를 직접 생성할 수 없으며, 이 클래스에 존재하는 메서드는 자식 객체에게 상속 되거나 재정의 되어 사용됨 - 모든 문자 기반 입력 클래스는 Reader 클래스를 상속받아 만들어지며, FileReader, BufferedReader, InputStream Reader 클래스가 있음 주요 메서드 Method Description void close() 스트림(Stream)을 닫고 그것과 관련된 시스템 리소스를 방출 void mark(int readAheadLimit) 스트림(Stream)에 현재 위치를 표시 boolean m..
썸네일 Java IO 2 File 클래스 생성자, 주요 메서드 java.io.File 클래스는 파일의 크기, 파일의 접근 권한, 파일의 삭제, 이름 변경 등의 작업을 할 수 있는 기능을 제공해준다. 여기서 주의할 점은 디렉토리(폴더) 역시 파일로써 취급된다는 점이다. 순서 반환타입 메소드 이름 설명 1 boolean canExecute() 어플리케이션이 해당 파일을 실행할 수 있는지 테스한다. 2 boolean canRead() 어플리케이션이 해당 파일을 읽을 수 있는지 테스트한다. 3 boolean canWrite() 어플리케이션이 해당 파일을 변경할 수 있는지 테스트한다. 4 int compareTo(File pathname) 파일경로를 사전식으로 비교한다. 결과(0 : 일치, 음수 : 파일경로가 사전식으로 작은경우, 양수 ..
썸네일 JAVA IO 1 IO란? 입출력(Input & Output) 입력은 키보드, 네트워크, 파일등으로 부터 받을 수 있다. 출력은 화면, 네트워크, 파일등에 할 수 있다. Java IO도 객체이다. Java IO에서 사용하는 객체는 자바 세상에서 사용되는 객체이다. Java IO에서 제공되는 객체는 어떤 대상으로부터 읽어들여 어떤 대상에게 쓰는 일을 한다. Java IO는 조립되어 사용되도록 만들어졌다. -- Decorator 패턴으로 만들어 졌다. 주인공과 장식을 구분할 수 있어야 한다. 장식은 InputStream, OutputStream, Reader, Writer를 생성자에서 받아들인다. 주인공은 어떤 대상에게서 읽어들일지, 쓸지를 결정한다. 주인공은 1byte or byte[] 단위로 읽고 쓰는 메서드를 가진다. ..
Enum 자바의 Enum은 Enumeration의 약자로 JDK 5부터 지원되는 기능이다. Enum 사용하기 클래스를 생성하는 방식처럼 Enum을 생성한다. Enum 안에 상수를 나타내는 값을 적는다. 상수와 상수는 콤마(,)로 구분한다. Enum의 특징 Enum은 타입에 대해 안전하다. 미리 정의된 Enum 변수 안의 상수만을 대입할 수 있다. Day day = Day.SUNDAY; 위와 같은 코드는 되지만 Day day = 5; 위와 같은 코드는 되지 않는다. Enum은 switch문에서 사용 가능하다. JDK 7부터 switch문에서 String도 사용 가능하다. public class DaySwitchTest { public static void main(String[] args) { Day day = D..