본문 바로가기

java

(18)
java 익명 객체 - 중첩 클래스와 중첩 인터페이스 426p 익명 객체를 만들기 위한 조건이 있습니다. 어떤 클래스를 상속하거나 인터페이스를 구현해야 합니다. 1.익명 자식 객체 자식 클래스를 명시적으로 선언하는 이유는 어디서건 이미 선언된 자식 클래스로 간단히 객체를 생성해서 사용할 수 있기 때문입니다. 우리는 이것을 재사용성이 높다고 말합니다. 그러나 자식 클래스가 재사용되지 않고 오로지 특정 위치에서 사용할 경우라면 자식 클래스를 명시적으로 선언하는 것은 귀찮은 작업이 됩니다. 이 경우에는 익명 자식 객체를 생성해서 사용하는 것이 좋습니다. 익명 자식 객체를 생성하는 방법은 다음과 같습니다. 부모클래스 [필드|변수] = new 부모클래스(매개값,...) { \\필드 \\메소드 }; * 하나의 실행문이므로 ';'을 반드시 붙여야 합니다. '부모클래스(..
java 중첩 클래스, 중첩 인터페이스 1. 중첩 클래스(nested class) 중첩 클래스(nested class)란 클래스 내부에 선언한 클래스를 말합니다. 중첩 클래스를 사용하면 두 클래스의 멤버들에 서로 쉽게 접근할 수 있고, 외부에는 불필요한 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있습니다. nest 2. 타동사 전문 용어 [VN] (큰 단위의 정보 속에 작은 단위의 정보를) 끼워 넣다 class ClassName { class NestedClassName { } } 중첩 클래스는 클래스 내부에 선언되는 위치에 따라서 두 가지로 분류됩니다. 클래스의 멤버로서 선언되는 클래스를 멤버 클래스라고 하고, 메소드 내부에서 선언되는 중첩 클래스를 로컬 클래스라고 합니다. 멤버 클래스는 클래스나 객체가 사용 중이라면 언제든 재사용이..
java 인터페이스(interface) 인터페이스는 객체의 사용방법을 정의한 타입입니다. 인터페이스를 통해 다양한 객체를 동일한 방법으로 이용할 수 있습니다. 인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 합니다. 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출합니다. 그렇기 때문에 개발 코드는 객체의 내부 코드를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 됩니다. 1. 인터페이스를 사용하는 이유 개발 코드를 수정하지 않고 사용하는 객체를 변경할 수 있도록 하기 위해서입니다. 인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라 실행 내용과 리턴값이 달라질 수 있습니다. 따라서 개발 코드 측면에서는 코드 변경 없이 실행 내용과 리턴값을 다양화할 수 있다..
추상 클래스, 추상 메소드 객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 합니다. 추상 클래스와 실체 클래스는 상속의 관계를 가지고 있습니다. 추상 클래스가 부모, 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성을 물려받고 추가적인 특성을 가질 수 있습니다. 여기서 특성이란 필드와 메소드를 말합니다. 1. 추상 클래스의 용도 공통된 필드와 메소드의 이름을 통일할 목적 실체 클래스를 작성할 때 시간 절약 - 공통적인 것은 추상 클래스에 미리 작성하고 다른 점만 실체 클래스에 선언 2. 추상클래스 선언 클래스 선언에 'abstract' 키워드를 붙여야 합니다. 이 키워드를 붙으면 new 연산자를 통해 객체를 만들지 못하고, 상..
다형성 1. 자동 타입 변환 클래스에서도 기본 타입들과 마찬가지로 타입 변환이 일어납니다. 클래스의 변환은 상속 관계에 있는 클래스 사이에서 발생합니다. 자식은 부모 타입으로 자동 타입 변환이 가능합니다. 예를 들어 고양이가 동물의 특징과 기능을 상속받았다면 '고양이는 동물이다'가 성립하는 것과 마찬가지입니다. Cat cat = new Cat(); Animal animal = cat; // Animal animal = new Cat()도 가능. 이 때 cat과 animal 변수는 타입만 다를 뿐 동일한 Cat 객체를 참조합니다. cat == animal // true 또한 바로 위의 부모가 아니더라도 상속 계층에서 상위 타입이라면 자동 타입 변환이 일어날 수 있습니다. ***부모타입으로 자동 타입 변환된 이후에..
메소드 재정의(오버라이딩 Overriding) 부모 클래스의 모든 메소드가 자식 클래스에 맞게 설계되어 있다면 가장 이상적인 상속이지만, 어떤 메소드는 자식 클래스가 사용하기에 적합하지 않을 수도 있습니다. 이 경우 상속된 일부 메소드는 자식 클래스에서 다시 수정하여 사용해야 합니다. 자바는 이런 경우를 대비하여 메소드 재정의 기능의 제공합니다. 재정의 방법 1. 부모의 메소드와 동일한 선언부(리턴 타입, 메소드 이름, 매개 변수 목록)를 가져야 합니다. 2. 접근 제한을 더 강하게 재정의할 수 없습니다.(예를 들어 public에서 private으로 변경 불가) 그러나 반대로 접근 제한을 약화시키는 것은 가능합니다.(예를 들어 default에서 protected으로) 3. 새로운 예외를 throws할 수 없습니다. 메소드가 재정의되면 부모 객체의 메..
상속과 super(); + this() 클래스 이름 뒤에 'extends + 상속받을 클래스명'을 적어줌으로써 가능합니다. 상속은 1개만 가능합니다. 상속받은 자식 객체를 생성하면 그 객체의 부모 객체가 먼저 생성되고 그 다음에 자식 객체가 생성됩니다. 그렇다면 부모 객체는 어떻게 생성되는 것일까요? 바로 자식 생성자의 맨 첫줄에서 호출됩니다. 만일 자식 클래스의 생성자가 명시적으로 선언되지 않았다면 컴파일러는 다으과 같은 기본 생성자를 생성합니다. public Child() { super(); } super();는 부모의 기본 생성자를 호출합니다. 그러나 부모 클래스에 기본 생성자가 존재하지 않고 매개 변수가 필요한 생성자만 있다면 자식 생성자에서 반드시 부모 생성자 호출을 위해 super(매개값, ...)을 명시적으로 호출해야 합니다. s..
java 이클립스 단축키 모음 1. import문 자동 추가 기능 이클립스에는 개발자가 import문을 작성하지 않아도 사용된 클래스를 조사해서 필요한 import문을 자동으로 추가하는 기능이 있습니다. 현재 작성 중인 클래스에서 [Source] - [Organize imports] 메뉴를 선택하거나 단축키 ctr + shift + o를 누릅니다. 2. + 이클립스는 부모 메소드 중 하나를 선택해서 재정의 메소드를 자동 생성해주는 기능이 있습니다. 이 기능은 부모 메소드의 선언부(시그니처)를 정확히 모를 경우 매우 유용하게 사용할 수 있습니다. 1. 자식 클래스에서 재정의 메소드를 작성할 위치로 입력 커서를 옮깁니다. 2. [Source] - [Override/Implement Methods] 메뉴를 선택합니다. 3. 부모 클래스에서..