본문 바로가기

전체 글

자바의 정석 - 7.11 내부 클래스 7.11.1 내부 클래스 두 클래스가 긴밀한 관계가 있을 때 사용 내부 클래스에서 외부 크래스의 멤버를 쉽게 접근 가능 캡슐화를 통해 코드의 복잡성을 낮춤 class A{ class B{} } 7.11.2 내부 클래스의 종류와 특징 인스턴스 클래스 스태틱 클래스 지역 클래스 익명 클래스 7.11.3 인스턴스 클래스 외부 클래스의 인스턴스 멤버처럼 다뤄짐 외부 클래스의 인스턴스 멤버들과 관련된 작업이 있을 경우 주로 사용 class A{ class B{} } 7.11.4 static 클래스 외부 클래스의 static 멤버처럼 다뤄짐 static 메서드에서 사용될 목적으로 선언 class A{ static class B{} } 7.11.5 지역 클래스 외부 클래스의 메서드나 초기화 블럭안에 선언 선언된 영역.. 더보기
자바의 정석 - 7.10 인터페이스 7.10.1 인터페이스(interface) 일반 메서드 및 멤버 변수를 가질 수 없는 클래스. 추상만 가질 수 있다. 다른 클래스 작성에 도움을 줄 목적으로 만듦 class의 Object처럼 최고 조상은 없다 💡 JDK 1.8이후로 static와 default 메서드는 생성 가능 💡 interface작성시 이름뒤에 '~able'을 붙여 메서드를 제공한다는 의미 강조하는게 좋음. 7.10.2 인터페이스 작성 class대신 interface를 사용 public or default 접근 제어자 사용 interface A{} 모든 멤버 변수는 public static final 이어야 하며, 생략 가능 모든 메서드는 public abstract 이어야 하며, 생략 가능 interface Card{ public .. 더보기
자바의 정석 - 7.9 추상 클래스 7.9.1 추상 클래스 abstract로 선언한 클래스 abstract class Test{} 추상 및 일반 멤버 변수와 메서드 생성 가능 추상 클래스로 지정되면 인스턴스 생성 불가 7.9.2 추상 메서드 abstract로 선언한 메서드 구현부가 없기 때문에 ';'로 마무리 abstract void a(); 추상 메서드로 선언된 것은 자식 클래스에서 꼭 구현부를 만들어야 함. 만약 구현하지 않을경우 자식 역시 추상 클래스로 구현해야 함 abstract class Player{ abstract void a(); abstract void b(); } abstract class A extends Playter{ void a(){} } //Error class A extends Playter{ void a(){.. 더보기
자바의 정석 - 7.8 다형성 7.8.1 다형성(polymorphism) 여러 가지 형태를 가질 수 있는 능력 부모 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있는 것 Parent p = new Child(); 다형성을 사용하는 경우 부모의 타입 참조변수는 자식에서 선언한 멤버 사용 불가 class Parent{ int a; } class Child extends Parent{ int b; } Parent p = new Child(); p.a //가능 p.b //불가 💡 클래스는 상속을 통해 확장될 수는 있어도 축소될 수 없기 때문에 부모 인스턴스의 멤버 개수는 자식 인스턴스의 멤버 개수보다 작거나 같다. 7.8.2 참조변수의 형변환 자식 → 부모(Up-casting) : 형변환 생략가능 자식 ← 부모(Down-ca.. 더보기
자바의 정석 - 7.7 제어자 7.7.1 접근제어자 및 제어자 접근 제어자 : public, protected, default, private 제어자 : static, final, abstract, native, transient, synchronized, volatile, strictfp 하나의 대상에 여러 제어자 조합하여 사용 가능 접근 제어자는 하나만 가능 7.1.2 static 클래스의, 공통적인 인스턴스에 관계없이 항상 같은 값 인스턴스를 생성하지 않고 사용가능 멤버변수, 메서드, 초기화블럭에서 사용 가능 💡 static은 메모리에 로딩될 때 단 한번만 수행. 주로 클래스변수(static)를 초기화 하는데 사용 7.1.3 final 변경될 수 없는 상수로 선언할 때 사용 클래스, 메서드, 멤버변수, 지역변수에서 사용 가능 💡.. 더보기
자바의 정석 - 7.6 Import 7.6.1 import 사용하고자 하는 클래스의 패키지를 미리 선언하여 소스코드에서 패키지명 생략 import java.langSystem.out; out.println("test"); 7.6.2 static import static 멤버를 호출할 때 클래스 이름 생략 가능 import static java.lang.Math.* System.out.println(Math.PI); System.out.println(PI); 더보기
자바의 정석 - 7.5 패키지 7.5.1 패키지(package) 물리적인 하나의 디렉토리 선언 : package 패키지명; package 패키지명; 컴파일 방법 javac -d . PackageTest.java //-d 옵션으로 현재 디렉토리(.)에서 PackageTest.java를 컴파일 클래스 패스 지정(-cp) java -cp c:\jdk1.8\work com.abc.test 더보기
자바의 정석 - 7.4 오버라이딩 7.4.1 오버라이딩(overriding) 상속받은 메서드의 내용 변경 부모 클래스 내부에 존재하는 메소드를 상속 받아 자손에서 재정의 class Shape{ void shapeMethod(){} } class Cycle extends Shape{ void shapeMethod(){ System.out.println('hi'); } } 7.4.2 오버라이딩 조건 이름이 같이야 한다. 매개변수가 같아야 한다. 변환타입이 같아야 한다. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다. class Parent{ void method(){} } class Child extends Parent{ public void method(){} } //Error class Child extends Pa.. 더보기