분류 전체보기 74

[자바의정석 - 기초편] 7. (9) 추상 클래스 / 추상 메서드 / 디폴트 메서드

추상 클래스 (abstract class) 미완성 설계도. 미완성 메서드를 갖고있는 클래스 abstract class Player { // 추상클래스 (미완성 클래스) abstract void play (int pos); // 추상메서드 (몸통 {}이 없는 미완성 메서드) abstract void stop(); // 추상메서드 - 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가 Player p = new Player(); // 에러. 추상 클래스의 인스턴스 생성 불가 - 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능 class AudioPlayer extends Player { void play(int pos) { /* 내용 생략 */ } // 추상 메서드를 구현 (몸통) void..

[자바의 정석 - 기초편] 7. (8) 매개변수의 다형성 / 여러 종류의 객체를 배열로 다루기

다형성의 장점 1. 다형적 매개변수 2. 하나의 배열로 여러종류 객체 저장 매개변수의 다형성 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있음 여러 종류의 객체를 배열로 다루기 조상타입의 배열에 자손들의 객체를 담을 수 있음 Vector : 가변 배열 기능을 가진 클래스이고 Object [ ] 배열이 멤버로 있어서 모든 종류의 객체를 저장할 수 있음 cart 참조변수를 만들어서 구입 제품 저장하기 위한 배열 생성

[자바의 정석 - 기초편] 7. (7) 다형성 ( 참조변수의 형변환 / instanceof 연산자 )

참조변수의 형변환 사용할 수 있는 멤버의 개수를 조절하는 것 - 조상 & 자손 관계의 참조변수는 서로 형변환 가능 - 형제 관계는 불가능 * 객체가 NULL이어도 형변환 가능하지만, 실행하면 NullPointException 발생 * 실제 인스턴스를 확인하고 그 멤버의 개수를 넘어서면 안됨 class Car { } class FireEngine extends Car { } class Ambulance extends Car { } FireEngine f = new FireEngine(); Car c = (Car) f; // OK. 조상인 Car타입으로 형변환 (생략가능) FireEngine f2 = (FireEngine) c; // OK. 자손인 FireEngine타입으로 형변환 (생략불가) Ambulan..

[자바의 정석 - 기초편] 7. (6) 캡슐화 / 다형성

캡슐화와 접근 제어자 접근 제어자를 사용하는 이유? 1. 외부로부터 데이터를 보호하기 위해서 2. 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서 특정 범위가 있는 변수들을 private으로 설정하여 외부 직접 접근을 막고, 메서드를 public으로 하여 메서드를 통해 간접 접근만 허용하도록 해야함 다형성 (polymorphism) 여러가지 형태를 가질 수 있는 능력 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 - 자손타입의 참조 변수로 조상 타입의 객체를 가리킬 수 없음 (에러) 조상 타입 Tv의 참조변수 t로 자손타입 SmartTv의 객체를 다룸 객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이? 1. SmartTv s = new Smar..

[자바의 정석 - 기초편] 7. (5) 제어자 ( static, final, abstract ) / 접근 제어자 ( private, default, protected, public )

제어자 (modifier) 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여 접근 제어자 : public, protected, (default), private (4개 중 하나만) 그외 : static, final, abstract, native, transient, synchronized, volatile, strictfp - 하나의 대상에 여러 제어자 같이 사용 가능 (접근 제어자는 하나만) - 순서는 상관없지만 접근 제어자를 제일 왼쪽에 쓰는 것이 관례적 static - 클래스의, 공통적인 제어자 대상 의미 static 멤버변수 - 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 됨 - 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능 - 클래스가 메모리에 로드될 때 생성됨 메서..

[자바의 정석 - 기초편] 7. (4) 패키지 / 클래스 패스 / import문 / static import문

패키지 (package) 서로 관련된 클래스의 묶음 - 클래스는 클래스 파일(*.class), 패키지는 폴더, 하위 패키지는 하위 폴더 - 클래스의 실제 이름(full name)은 패키지를 포함 (java.lang.String) - rt.jar은 클래스들을 압축한 파일 (JDK 설치경로 \ jre \ lib에 위치) 패키지의 선언 - 패키지는 소스파일의 첫번째 문장으로 단 한번 선언 - 같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 됨 - 패키지 선언이 없으면 이름없는 패키지 (default package)에 속하게 됨 *bin 폴더 : 컴파일된 클래스 파일 (*.class)이 있는 곳 *src 폴더 : 소스파일 (*.java)이 있는 곳 클래스 패스 (classpath) - 클래스 파일(*.c..

[자바의 정석 - 기초편] 7. (3) 참조변수 super / 생성자 super()

참조변수 super 객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자) 내에만 존재 조상의 멤버를 자신의 멤버와 구별할 때 사용 x가 중복 : 조상의 멤버 = super.x / 자신의 멤버 = this.x x가 중복이 아님 : 조상의 멤버 = super.x 이면서 this.x super() - 조상의 생성자 - 조상의 생성자를 호출할 때 사용 - 조상의 멤버는 조상의 생성자를 호출해서 초기화 자손의 생성자는 조상의 멤버를 초기화 못함! ➔ 조상 클래스의 생성자를 호출해야 함 super() - 조상의 생성자의 조건 모든 생성자는 첫 줄에 반드시 다른 생성자를 호출해야 함 그렇지 않으면 컴파일러가 생성자의 첫 줄에 super();를 삽입함 (조상의 기본 생성자 호출) -..

[자바의 정석 - 기초편] 7. (2) 오버라이딩 (overriding) / 오버로드 (overload)

오버라이딩 (overriding) 상속받은 조상의 메서드를 자신에 맞게 변경하는 것 (덮어쓰는 것) 구현부 {} 내용만 변경 가능 상속받은 메서드의 내용을 오버라이딩하여 나에게 맞게 바꿈 오버라이딩 조건 1. 선언부가 조상 클래스의 메서드와 일치해야 함 2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없음 3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없음 오버로딩 VS 오버라이딩 오버로딩 (overloading) : 기존에 없는 새로운 메서드를 정의하는것 (new) 이름만 같은 메서드를 새로 정의 오버라이딩(overriding) : 상속받은 메서드의 내용을 변경하는 것 (change, modify) 조상의 메서드를 자손에서 변경

[자바의 정석 - 기초편] 7. (1) 상속 (Inheritance) / 포함 (composite) / 단일 상속 / Object 클래스

상속 (Inheritance) 기존의 클래스로 새로운 클래스를 작성하는 것 ( 코드의 재사용) 두 클래스를 부모와 자식으로 관계를 맺어주는 것 class 자식 클래스 extends 부모 클래스 { ... } class Parent { } class Child extends Parent { ... } 상속의 규칙 - 자손은 조상의 모든 멤버를 상속 받음 (생성자, 초기화 블럭 예외) - 자손의 멤버 개수는 조상보다 적을 수 없음 (항상 같거나 많음) - 자손의 변경은 조상에 영향을 미치지 않음 - 부모 클래스에 변경이 있다면 자식클래스에 영향을 줌 포함 (composite) 클래스의 멤버로 참조변수를 선언하는 것 작은 단위의 클래스를 만들고, 이들을 조합해서 클래스 만듦 클래스 간의 관계 결정하기 상속관계..

[자바의 정석 - 기초편] 6. (9) 생성자 this() / 참조변수 this / 변수의 초기화 / 멤버 변수의 초기화

생성자 this() 생성자에서 다른 생성자 호출할 때 사용 - 다른 생성자 호출시 첫 줄에서만 사용 가능 참조변수 this 인스턴스 자신을 가리키는 참조변수 - 인스턴스 메서드(생성자 포함)에서 사용가능 - 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용 같은 클래스 내에서는 원래 this 생략 가능하지만 iv와 lv 이름이 같을 때는 구별하기 위해 this 생략 X 참조변수 this와 생성자 this() this : 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있음, 모든 인스턴스 메서드에 지역변수로 숨겨진 채 존재 this(), this(매개변수) : 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용 (클래스 이름대신 사용) 변수의 초기화 지역 변수(lv) = 사용 전 ..