인터페이스의 장점 - 두 대상(객체)간의 연결, 대화, 소통을 돕는 중간 역할을 한다. (ex윈도우) - 선언과 구현을 분리 (변경에 유리한 유연한 설계) - 개발시간을 단축한다. - 표준화가 가능하다. (JDBC) - 서로 관계없는 클래스들을 관계를 맺어줄 수 있다. 클래스 B 를 인터페이스 사용해서 나타내기 class B { public void method() { System.out.println("methodB"); } } interface I { public void method(); } 위의 코드를 보면 메서드를 멤버로 받는 새로운 인터페이스를 선언한다. 추상메서드로 만들어 선언부(껍데기)만 떼어낸다. class B inplements I { public void method() { Syste..
참조변수의 형변환 ▶ 조상 자손관계의 참조변수는 서로 형변환 가능 class Car {} class FireEngine extends Car { } class Ambulance extends Car { } FireEngine , Ambulance 가 있는데 둘다 car의 자손이다. 아래의 그림으로 보면 이러한 상속관계를 볼 수 있다. 형변환의 특성으로 조상 자손 관계의 참조변수는 서로 형변환이 가능하다. 그렇기 때문에 Car 클래스의 자손들은 조상 자손 관계가 충족되기 때문에 형변환이 가능하다, 하지만 형제들끼리는 형변환이 가능하지 않다. class Car { String color; int door; void drive(){ //운전하는 기능 System.out.println("drive~"); } v..
다형성(polymorphism) ▶ 여러 형태를 가지는 특성 ▶ 조상타입 참조변수로 자손타입 인스턴스를 다루는 것 class Tv{ boolean power; int channel; void power() {power =!power;} void channelUp() {++channel; } void channelDown() { --channel;} } class SmartTv extends Tv{ String text; void caption() {//내용생략} } 위의 코드를 보면 타입이 일치하고 있는 것을 볼 수 있다. 다형성을 배우기 전까지는 이러한 형태로 타입을 일치시켜서 사용을 하였다. 다형성은 이러한 타입이 불일치시키는 것을 말한다. 아래의 코드를 보면 타입이 불일치하는 것을 볼 수있다. 쉽게..
제어자(modifier) 클래스와 클래스의 멤버(멤버 변수, 메서드) 에 부가적인 의미 부여 ▶ 접근제어자 : public, protected, (default), private ▶ 그 외 : static, final, abstract, native, transient, synchronized main() 메서드를 가지지 않는 대부분의 클래스는 외부 클래스에서 이용할 목적으로 설계된 라이브러리 클래스이다. 라이브러리 클래스를 설계할 때에는 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버로 구분해서 필드, 생성자, 메서드를 설계한다. 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 막아야 한다. 또한 특정 메서드를 호출할..
참조변수 super - 객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자)내에만 존재 - 조상의 멤버를 자신의 멤버와 구별할 때 사용 ex1) Parent 클래스와 child클래스가 생성되어있다. child클래스는 상위클래스인 Parent 를 상속받고 있으며 각 클래스에는 int x 변수가 들어있다. c.method() 메서드를 호출하면 참조변수 c가 가르키는 child 객체가 생성된다. 이름이 겹칠 때에는 조상의 멤버에는 Super. , 자신의 멤버에는 this.을 사용하여 구별한다. 결과 x = 20 this.x = 20 super.x = 20 ex2) ex1과 비슷하지만 상위클래스인 Parent2에만 int x 변수가 있다. x가 상위클래스에 하나밖에 없기 때문에 Super.x 와 this.x..
메서드 오버라이딩(Overriding) - 상속받은 조상의 메서드를 자신에 맞게 변경하는 것 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; } } 오버라이딩 메서드를 선언할 때 주의할점은 선언부는 그대로 써야한다. 변경이 불가능하며 내용만 변경을 한다. 오버라이딩의 조건 1. 선언부가 조상클래스의 메서드와 일치해야한다. 2. 접근제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다. 3. 예외는 조상 클..
단일상속 java는 단일상속만 허용한다. (C++ 은 다중상속 허용) class TvDVD extends Tv, DVD { //에러 조상은 하나만 허용된다. } Tv와 DVD 의 메서드가 void power() 로 같고 내용이 다르다고 할 때 TvDVD가 상속받을 때 충돌이 일어난다. 그래서 자바는 다중상속을 하지않고 단일 상속으로 사용이 가능하다. 인터페이스를 이용하면 이러한 충돌문제를 해결하며 다중상속 효과를 낼 수 있게 한다. 인터페이스를 사용하지 않고 다중상속을 작성하는 방법 ▶ 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함 관계로 한다. TvDVD 클래스는 Tv를 상속한다. DVD 클래스는 객체를 생성하고 메서드 선언을 하여 사용을 하게 한다. 이렇게 하면 다중상속과 같은 효과를 나타낼 ..
포함관계 ▶ 포함(composite)이란? - 클래스의 멤버로 참조변수를 선언하는 것 - 작은 단위로 클래스를 만들고 이것을 조합해서 클래스를 만듬 [ Circle 클래스가 Point를 포함하는 관계 ] 클래스의 멤버로 참조변수. 다른 클래스타입의 변수를 선언하고 그 타입의 객체를 만들어준다. 클래스 간의 관계 결정 ▶ 상속관계 ~은 ~이다 (is - a) ▶ 포함관계 ~은 ~을 가지고 있다. (has-a) 1. (포함) 2. (상속) class Point { int x; int y; } 메모리구조