목록java (29)
ki-sd 님의 블로그
고정된 길이만 가질 수 있었던 배열의 구조적 한계를 완벽히 깨부수는 자바 컬렉션 프레임워크(Collection Framework)의 첫 주자를 다루었다. 1. ArrayList의 동적 크기 할당(Dynamic Sizing)ArrayList는 내부적으로는 일반 배열을 사용하지만, 데이터가 꽉 차면 자동으로 더 큰 새로운 배열을 내부에서 생성하고 기존 데이터를 복사해 옮기는 똑똑한 클래스다.개발자는 배열의 크기를 신경 쓸 필요 없이 add(), remove() 등의 메서드만 호출하여 데이터를 무한히 늘리거나 중간에 삽입/삭제할 수 있는 엄청난 편리함을 경험했다.2. 제네릭(Generics) - 타입의 명확화와 캐스팅 생략컬렉션은 모든 객체의 최상위인 Object 타입으로 데이터를 저장하기 때문에 어떤 데이터..
코드가 단순히 실행되는 것을 넘어, 런타임(실행 중)에 자기 자신의 구조를 들여다보고 조작하는 고급 기술인 리플렉션과 어노테이션을 파고들었다. 1. 리플렉션(Reflection)의 작동 원리일반적인 프로그래밍은 컴파일 타임에 어떤 클래스와 메서드를 사용할지 미리 결정하지만, 리플렉션을 사용하면 프로그램 실행 중에 특정 클래스의 이름만 가지고도 그 클래스 내부의 필드, 메서드, 생성자 정보(Class 객체)를 동적으로 추출할 수 있다.더 나아가, 추출한 정보를 바탕으로 런타임에 동적으로 객체를 생성하고, private으로 캡슐화된 변수에 접근 권한을 우회하여 값을 주입하거나 메서드를 호출하는 강력하지만 위험한 제어 기술을 실습했다.2. 어노테이션(Annotation)과 프레임워크의 뼈대@Override처럼..
기본형 데이터를 객체로 다루는 기법과, 시스템 성능을 좌우하는 문자열 버퍼, 그리고 복잡한 시계열 데이터를 다루는 방법을 깊이 있게 학습했다. 1. Wrapper 클래스와 Auto-Boxing자바의 8가지 기본형(Primitive Type)은 객체가 아니기 때문에, 객체만을 요구하는 컬렉션(ArrayList 등)이나 제네릭에는 들어갈 수 없다. 이를 포장해서 객체로 만들어주는 Integer, Double, Boolean 등의 Wrapper 클래스를 학습했다.컴파일러가 기본형과 Wrapper 클래스 사이를 자동으로 변환해 주는 오토박싱(Auto-boxing)과 언박싱(Unboxing) 메커니즘을 확인하며 코드가 어떻게 간결해지는지 이해했다.2. StringBuffer의 내부 버퍼 메커니즘이전 시간에 배운 ..
자바의 근간을 이루는 기본 패키지의 구조를 파악하고, 메모리의 휘발성을 극복하는 파일 입출력(I/O)의 세계에 입문했다. 1. java.lang 패키지와 Object 클래스java.lang은 자바 프로그래밍에 가장 필수적인 클래스들을 모아둔 패키지로, import 문을 작성하지 않아도 컴파일러가 자동으로 로드해 준다.최상위 클래스 Object: 자바의 모든 클래스는 암묵적으로 Object 클래스를 상속받는다는 사실을 확인했다. 객체의 상태를 문자열로 반환하는 toString(), 객체의 동등성을 비교하는 equals(), 고유 주소값을 해싱하는 hashCode() 등 시스템의 핵심 메서드들이 Object에 정의되어 있으며, 이를 상황에 맞게 오버라이딩하여 사용하는 규격을 학습했다.2. 파일 입출력(I/O..
복잡한 자원 해제 코드를 자동화하는 현대적인 문법과, 도메인에 특화된 에러를 직접 설계하는 방법을 익혔다. 1. try-with-resources (자원 관리의 자동화)기존의 try-catch-finally 구조는 자원을 닫기 위한 코드가 본래의 로직보다 길어지는 가독성 저하를 유발했다.자바 7부터 도입된 try-with-resources 구문을 사용하면, try(자원 할당) 괄호 안에 객체를 생성할 경우 예외 발생 여부와 상관없이 블록이 끝날 때 시스템이 알아서 close()를 호출해 준다. 단, 해당 객체가 반드시 AutoCloseable 인터페이스를 구현하고 있어야 한다는 내부 작동 원리를 확인했다.2. 사용자 정의 예외(Custom Exception) 설계자바가 기본적으로 제공하는 NullPoin..
예외 처리의 심화 단계로, 시스템 외부의 자원을 빌려 썼을 때 발생할 수 있는 메모리 누수를 방지하는 책임감을 배웠다. 1. 시스템 리소스 관리의 중요성자바 프로그램이 내부 메모리만 사용할 때는 가비지 컬렉터(GC)가 알아서 청소를 해주지만, 파일 시스템을 열어 읽거나(I/O), 데이터베이스와 연결(Connection)을 맺는 등 외부 자원을 사용할 때는 GC가 이를 즉각적으로 회수하지 못한다.다 쓴 자원을 명시적으로 닫아주지(close()) 않으면, 시스템 자원이 고갈되어 결국 서버가 다운되는 치명적인 문제가 발생할 수 있다.2. finally 블록의 강력한 실행 보장예외가 발생하든, 발생하지 않든, 심지어 try나 catch 블록 내부에 return문이 있어도 무조건 마지막에 실행됨을 보장하는 블록이..
