목록java (29)
ki-sd 님의 블로그
한 달여간 배운 OOP, 컬렉션, I/O 스트림, 예외 처리, 멀티 쓰레드를 총망라하여 실제 동작하는 네트워크 기반 채팅 애플리케이션을 완성했다. 1. TCP/IP 소켓 프로그래밍의 원리클라이언트의 연결 요청을 지정된 포트(Port)에서 끝없이 대기하는 ServerSocket과, 실제 클라이언트와 연결되어 1:1 데이터 스트림 터널을 뚫어주는 Socket의 역할을 완벽히 분리하여 설계했다.2. 멀티 쓰레드 기반의 서버 아키텍처서버가 한 클라이언트의 메시지 수신(I/O)을 대기하는 동안 멈춰버리면(Blocking), 다른 클라이언트의 접속이나 메시지를 처리할 수 없다.이를 해결하기 위해 새로운 클라이언트가 접속할 때마다 해당 소켓을 담당하는 새로운 쓰레드를 생성하여 할당했다. 각 쓰레드가 독립적으로 동작하..
클래스의 구조적 유연성을 높이는 내부 클래스를 정리하고, 하나의 프로그램에서 여러 작업을 동시에 수행하는 멀티 쓰레딩의 세계에 진입했다. 1. 내부 클래스(Inner Class)의 활용클래스 내부에 선언되는 멤버 클래스, static 클래스, 지역 클래스, 익명 클래스의 선언 위치와 생명주기 차이를 분석했다. 외부에는 불필요한 클래스를 숨기고(캡슐화), 내부 클래스는 외부 클래스의 멤버에 자유롭게 접근할 수 있는 구조적 이점을 확인했다.2. 멀티 쓰레드(Multi-Thread) 구현 아키텍처Thread 클래스를 직접 상속받는 방식과, Runnable 인터페이스를 구현하여 Thread 객체에 주입하는 방식을 비교했다. 자바는 다중 상속이 불가능하므로, 유연한 확장을 위해 주로 Runnable 구현 방식을 ..
데이터의 흐름을 제어하는 I/O 스트림의 깊은 원리를 파악하고, 객체 자체를 파일로 영구 저장하는 고급 기술을 습득했다. 1. 바이트 스트림과 문자 스트림의 분리그림, 오디오, 영상 등 모든 종류의 데이터를 1바이트씩 처리하는 바이트 기반 스트림(InputStream, OutputStream)과, 텍스트 데이터의 한글 깨짐을 방지하기 위해 2바이트 단위로 묶어 처리하는 문자 기반 스트림(Reader, Writer)의 용도를 정확히 구분했다.성능 향상을 위해 내부적으로 메모리 버퍼를 사용하는 보조 스트림(BufferedReader, BufferedWriter)을 덧붙여(Chaining), 디스크 접근 횟수를 줄이고 입출력 속도를 획기적으로 개선하는 아키텍처를 실습했다.2. 객체 직렬화(Object Seri..
자바 프로그램이 단순히 메모리 안에서만 동작하는 것을 넘어, 운영체제(OS)의 파일 시스템에 직접 접근하고 제어하는 기초를 다루었다. 1. File 클래스의 메커니즘java.io.File 클래스는 파일의 실제 데이터(내용)를 다루는 것이 아니라, 파일이나 디렉토리의 '메타데이터(경로, 크기, 생성일 등)'를 다루는 객체다.경로(Path)의 이해: 운영체제 시스템의 최상위 경로부터 시작하는 절대 경로(Absolute Path)와, 현재 프로그램의 실행 위치를 기준으로 하는 상대 경로(Relative Path)의 개념을 명확히 구분하여 적용했다.2. 파일 시스템 제어 실습단순히 파일을 생성(createNewFile())하고 삭제(delete())하는 것을 넘어, 파일이 이미 존재하는지 확인(exists())..
기존의 객체 지향 방식을 넘어, 자바 8부터 도입된 함수형 프로그래밍(Functional Programming)의 패러다임을 받아들이고 코드의 표현력을 극대화했다. 1. 익명 클래스에서 람다식(Lambda Expression)으로의 진화단 한 번만 사용될 일회성 구현 객체를 만들기 위해 매번 익명 클래스를 작성하는 것은 코드가 길어지고 가독성을 해치는 원인이 된다.람다식 (매개변수) -> { 실행문 }을 도입하여, 메서드를 하나의 식(Expression)으로 취급하고 마치 변수처럼 전달하는 메커니즘을 익혔다. 코드가 극적으로 간결해지며, 오직 실행할 '동작(로직)' 자체에만 집중할 수 있게 되었다.2. Stream API를 이용한 선언적 데이터 처리컬렉션이나 배열에 저장된 요소를 반복문(for, whil..
데이터를 단순히 줄 세우는 List를 넘어, 각기 다른 고유한 특성을 가진 자료구조인 Set과 Map의 메커니즘을 해부하고 데이터 핸들링 로직을 고도화했다. 1. Set: 순서가 없고 중복을 불허하는 집합HashSet은 데이터를 저장할 때 인덱스가 부여되지 않으며, 내부적으로 동일한 데이터가 들어오면 무시하는 수학의 '집합'과 같은 성질을 띤다.객체의 중복을 판별하기 위해 자바가 내부적으로 객체의 hashCode() 값을 먼저 비교하고, 같으면 equals()로 한 번 더 비교하는 구조를 이해했다. 이를 통해 내가 만든 커스텀 객체(예: 동명이인의 사원 객체)가 중복 저장되지 않도록 두 메서드를 오버라이딩하는 실무적 테크닉을 익혔다.2. Map: Key와 Value의 쌍(Pair) 구조HashMap은 데..
