전체 글 208

리플렉션

클래스가 제공하는 다양한 정보를 동적으로 분석하고 사용하는 기능을 리플렉션(Reflection) 이라 한다. 리플렉션을 통해 프로그램 실행 중에 클래스, 메서드, 필드 등에 대한 정보를 얻거나, 새로운 객체를 생성하고 메서드를 호출하며, 필드의 값을 읽고 쓸 수 있다. 리플렉션을 통해 얻을 수 있는 정보는 다음과 같다.클래스의 메타데이터 : 클래스 이름, 접근 제어자, 부모 클래스, 구현된 인터페이스 등.필드 정보 : 필드의 이름, 타입, 접근 제어자를 확인하고, 해당 필드의 값을 읽거나 수정할 수 있다.메서드 정보 : 메서드 이름, 반환 타입, 매개변수 정보를 확인하고, 실행 중에 동적으로 메서드를 호출할 수 있다.생성자 정보 : 생성자의 매개변수 타입과 개수를 확인하고, 동적으로 객체를 생성할 수 있..

Java 정리 2024.12.27

채팅 프로그램

입장 : /join|{name} : 처음 채팅 서버에 접속할 때 사용자의 이름을 입력해야 한다.메시지  /message|{내용} : 모든 사용자에게 메시지를 전달한다.이름 변경 /change|{name} : 사용자의 이름을 변경한다.전체 사용자 /users : 채팅 서버에 접속한 전체 사용자 목록을 출력한다.종료  /exit : 채팅 서버의 접속을 종료한다.  블록킹 되어 있는 것들은 분리를 해야한다. 면 서버에서 모든 세션을 관리해야 한다. 그렇게 해야 모든 세션에 메시지를 전달할 수 있다. 세션을 관리하는 세션 매니저를 사용한다.   Client 구현public class ReadHandler implements Runnable { private final Client client; pub..

Java 정리 2024.12.25

Network program

TCP/IP 통신에서는 통신할 대상 서버를 찾을 때 호스트 이름이 아니라, IP 주소가 필요하다, 예를 들면 google은 다음과 같이 DNS탐색을 할 수 있다.public class InetAddressMain { public static void main(String[] args) throws UnknownHostException { InetAddress localhost = InetAddress.getByName("localhost"); System.out.println(localhost); InetAddress google = InetAddress.getByName("google.com"); System.out.println(google); ..

네트워크 - 기본 이론

클라이언트와 서버클라이언트-서버 모델 클라이언트 : 클라이언트는 서비스를 요청하는 쪽이다. 마치 식당에서 음식을 주문하는 손님처럼, 클라이언트는 어떤 정보를 얻거나 작업을 처리해달라고 요청하는 역할을 한다 서버 : 서버는 클라이언트의 요청을 받아들이고, 그 요청에 맞게 서비스를 제공하는 쪽이다. 식당에서 음식을 준비해서 손님에게 가져다주는 주방이나 웨이터가 서버의 역할을 한다.  Main 객체가 Service 객체의 메서드를 호출하면 Main 객체는 Service 객체에게 특정 작업을 요청한 것이다. 요청을 받은 Service 객체는 요청을 수행하고 결과를 반환한다. 여기서는 Main 객체가 클라이언트이고, Service 객체가 서버가 된다. Main 객체와 Service 객체의 관계에서 Main 객체는..

InputStream, OutputStream

현대의 컴퓨터는 대부분 byte 단위로 데이터를 주고 받는다. 참고로 bit 단위는 너무 작기 때문에 byte 단위를 기본으로 사용한다. 자바 내부에 있는 데이터를 외부에 있는 파일에 저장하거나, 네트워크를 통해 전송하거나 콘솔에 출력할 때 모두 byte 단위로 데이터를 주고 받는다. 스트림을 사용하면 파일을 사용하든, 소켓을 통해 네트워크를 사용하든 모두 일관된 방식으로 데이터를 주고 받을 수 있다. 그리고 수 많은 기본 구현 클래스들도 제공한다. InputStream, OutputStream 이 다양한 스트림들을 추상화하고 기본 기능에 대한 표준을 잡아둔 덕분에 개발자는 편리하게 입출력 작업을 수행할 수 있다. 이러한 추상화의 장점은 다음과 같다.일관성 : 모든 종류의 입출력 작업에 대해 동일한 인터..

스레드 풀과 Executor 프레임워크 - 2

ExecutorService 우아한 종료서비스를 안정적으로 종료하는 것도 매우 중요하다. 이렇게 문제 없이 우아하게 종료하는 방식을 graceful shutdown 이라 한다.  서비스 종료void shutdown()새로운 작업을 받지 않고, 이미 제출된 작업을 모두 완료한 후에 종료한다.논 블로킹 메서드(이 메서드를 호출한 스레드는 대기하지 않고 즉시 다음 코드를 호출한다.) List shutdownNow()실행 중인 작업을 중단하고, 대기 중인 작업을 반환하며 즉시 종료한다.실행 중인 작업을 중단하기 위해 인터럽트를 발생시킨다.논 블로킹 메서드 서비스 상태 확인boolean isShutdown(): 서비스가 종료되었는지 확인한다.boolean isTerminated(): shutdown(), shut..

운영체제 2024.12.21