Java/정석 11

clone

clone() 자신을 복제해 새로운 인스턴스를 생성하는 일을 한다. 어떤 인스턴스에 대해 작업을 할 때, 원래의 인스턴스는 보존하고 clone 메서드를 이용해 새로운 인스턴스를 생성하여 작업을 하면 작업 이전의 값이 보존되므로 작업에 실패해 원래의 상태로 되돌리거나 변경되기 전의 값을 참고하는 데 도움이 된다. Object 클래스에 정의된 clone()은 단순히 인스턴스 변수 값만 복사하기 때문에 참조 타입의 인스턴스 변수가 있는 클래스는 완전한 인스턴스 복제가 이루어지지 않는다. 배열의 경우, 복제된 인스턴스 변수의 값만 복사하기 때문에 복제된 인스턴스 작업이 원래의 인스턴스에 영향을 미치게 된다. 이런 경우 clone 메서드를 오버라이딩해서 새로운 배열을 생성하고 배열의 내용을 복사한다. x=3, y..

Java/정석 2022.06.10

인터페이스

인터페이스는 일종의 추상클래스다. 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외는 없다. 추상 클래스를 부분적으로 완성된 미완성 설계도라고 한다면, 인터페이스는 구현된 것이 아무 것도 없고 밑그림만 그린 기본 설계도라 할 수 있다. 인터페이스도 추상클래스처럼 완성되지 않은 불완전한 것이기 때문에 그 자체만으로 사용되기 보다는 다른 클래스를 작성하는데 도움 줄 목적으로 작성된다. 인터페이스 작성 인터페이스 작성은 클래스 작성과 같다. 다만 키워드로 class 대신 interface를 사용하는 것만 다르다. interface에도 클래스와 같이..

Java/정석 2022.06.03

추상 클래스

추상 클래스 미완성 메서드(추상 메서드)를 포함한 클래스를 뜻한다. 미완성 설계도로 완성된 작품을 만들 수 없 듯이 추상 클래스로 인스턴스를 생성할 수 없다. 추상 클래스는 상속을 통해서 child 클래스에 의해서만 완성된다. 추상 클래스 자체로는 클래스로서 역할을 다 못하지만, 새로운 클래스를 작성하는데 바탕이 되는 parent 클래스로서 중요한 의미를 갖는다. 새 클래스를 작성할 때 아무 것도 없는 상태에서 시작하는 것보다는 완전하지는 못 하더라도 어느 정도 틀을 갖춘 상태에서 시작하는 게 나으니. TV도 여러 종류 모델이 있지만 설계도는 거의 비슷하다. 이 들의 공통 부분만을 그린 미완성 설계도를 만들어 놓고, 이 걸 이용해 각각의 설계도를 완성하는 게 더 효율적이다. 추상 클래스 사용법 abstr..

Java/정석 2022.06.02

다형성

다형성은 상속과 깊은 관계가 있음. 여러가지 형태를 가지는 것을 의미하며, 참조변수 하나로 여러 타입의 객체를 참조하도록 한다. class TV { boolean power; // 전원 int channel; // 채널 void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } } class CaptionTV extends TV { String text; void caption() { ... } } TV와 CaptionTV 클래스가 서로 상속 관계에 있을 경우, 다음과 같이 parent 클래스의 참조변수로 child 클래스의 인스턴스를 참조가 가능하다. TV t = new TV(); Ca..

Java/정석 2022.06.01

오버라이딩

child 클래스를 필요에 의해 변경해야 하는 경우 parent 클래스를 오버라이딩한다. class Point { int x; int y; String getLocation() { return "x: " + x + ", y: " + y; } } class Point3D extends Point { int z; String getLocation() // 오버라이딩 { return "x: " + x + ", y: " + y + ", z: " + z; } } 조건 chlid 클래스에서 오버라이딩 하는 메서드는 조상 클래스의 메서드와 1. 이름이 같아야 한다. 2. 매개변수가 같아야 한다. 3. 반환타입이 같아야 한다. 오버로딩 vs 오버라이딩 오버로딩 기존에 없는 새로운 메서드를 추가 (NEW) 오버라이딩 조..

Java/정석 2022.06.01