주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 자바 7에서 새로 추가된 try - with - resources를 사용하면 예외 발생 여부와 상관없이 사용했던 리소스 객체(각종 입출력 스트림, 서버 소켓, 소켓, 각종 채널)의 close() 메서드를 호출해서 안전하게 리소스를 닫아줍니다. 리소스란 여러 가지 의미가 있겠지만 여기서는 데이터를 읽고 쓰는 객체라고 생각해 둡니다. 예를 들어 파일의 데이터를 읽는 FileInputStream 객체와 파일에 쓰는 FileOutputStream은 리소스 객체라고 보면 됩니다. 다음은 리소스 객체를 안전하게 닫기 위해 자바 6 이전까지 사..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 프로그램에서 예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드를 예외 처리 코드라고 합니다. 자바 컴파일러는 소스 파일을 컴파일할 때 일반 예외가 발생할 가능성이 있는 코드를 발견하면 컴파일 오류를 발생시켜 개발자로 하여금 강제적으로 예외 처리 코드를 작성하도록 요구합니다. 하지만 실행 예외는 컴파일러가 체크해주지 않기 때문에 예외 처리 코드를 개발자의 경험을 바탕으로 작성해야 합니다. 예외 처리 코드는 try - catch - finally 블록을 이용합니다. 이 블록은 생성자 ..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 자바에서는 에러 이외에 예외(exception)라고 부르는 오류가 있습니다. 예외란, 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말합니다. 예외가 발생되면 프로그램은 곧바로 종료된다는 점에서는 에러와 동일합니다. 그러나 예외는 예외 처리(Exception Handling)를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있습니다. 예외는 두 가지 종류가 있습니다. 하나는 일반 예외(Exception)이고, 다른 하나는 실행 예외(RuntimeException)입니다. 일반 ..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 익명 객체는 이름이 없는 객체를 말합니다. 익명 객체는 단독으로 생성할 수는 없고 클래스를 상속하거나 구현할 인터페이스가 있어야만 생성할 수 있습니다. 익명 객체는 필드의 초기값이나 로컬 변수의 초기값, 매개 변수의 매개 값으로 주로 대입됩니다. UI 이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적으로 익명 객체가 많이 활용됩니다. 익명 자식 객체 생성 부모 타입으로 필드나 변수를 선언하고, 자식 객체를 초기값으로 대입할 경우를 생각해 보겠습니다. 우선, 부모 클래스를 상속해서 자식 클래스를 선언하고, new 연산자를 이용해..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 말합니다. 인터페이스를 클래스 내부에 선언하는 이유는 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위함입니다. 특히 UI 프로그래밍에서 이벤트를 처리할 목적으로 많이 활용됩니다. class A { interface I { void method(); } } 예를 들어 Button을 클릭했을 때 이벤트를 처리하는 객체를 받고 싶다고 가정해 보겠습니다. 그렇다고 아무 객체나 받으면 안 되고, Button 내부에 선언된 중첩 인터페이스를 구현한 객체만 받아야 한다면 다음과 같..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 바깥 필드와 메서드에서 사용 제한 인스턴스 멤버 클래스는 바깥 클래스의 인스턴스 필드의 초기값으로 사용될 객체를 생성하거나 인스턴스 메서드에서 객체를 생성할 수 있습니다. 하지만 정적 필드의 초기값으로 사용될 객체를 생성하거나 정적 메서드에서 객체를 생성하는 것은 불가능합니다. 반면 정적 멤버 클래스는 모든 필드의 초기값이나 모든 메서드에서 객체를 생성할 수 있습니다. 즉, 인스턴스 멤버 클래스는 인스턴스 필드와 인스턴스 메서드에 대해서만 객체를 생성할 수 있고, 정적 멤버 클래스는 정적 필드와 메서드에 대해서도 객체를 생성할 수 ..