인터페이스는 .java형태의 소스파일로 작성되고 컴파일러(javac)를 통해 .class 형태로 컴파일되기 때문에 물리적 형태는 클래스와 동일하다. 그러나 선언 하는 방법은 다르다. -인터페이스 선언방법 public interface 인터페이스명 {} 클래스는 필드, 생성자, 메소드로 구성되어지는 반면에 인터페이스는 상수필드, 추상메소드으로만 구성되어진다. 상수는 public static final로 선언하기 때문에 public static final을 생략하더라도 컴파일과정에서 자동으로 붙게된다. [public static final 타입 상수명 = 값; -인터페이스 예제 예시로 리모컨이라는 인터페이스를 선언하고 그에 따른 TV, Audio 라는 구현 클래스를 작성해보도록 한다. 1. 인터페이스 및 추..
메모든 실체들이 가지고 있는 메소드의 실행 내용이 동일하면 추상클래스에 메소드를 작성하는 것이 좋다. 하지만 메소드의 선언만 통일하고 실행 내용은 실체 클래스마다 달라야 하는 경우가 있다. 예시로 모든 동물은 소리를 내기에 Animal이라는 추상 클래스에서 sound() 라는 메소드를 정의했다면 동물마다 다른 소리를 내야하므로 sound() 메소드를 추상 메소드로 선언한 뒤 실체 클래스에서 재정의(오버라이딩)을 해준다. 1. 추상 메소드 선언 : 메소드의 선언부만 있는 메소드로 자식 클래스에서 재정의(오버라이딩)되어 실행 내용을 결정해야한다 1 2 3 4 5 6 7 8 9 10 11 12 13 package chapter07_03; public abstract class Animal { public St..
객체를 직접 생성할 수 있는 클래스를 '실체 클래스'라 한다면 이 실체클래스들의 공통적인 특성을 추출해서 선언한 클래스를 '추상 클래스'라 한다. 추상클래스와 실체 클래스는 상속관계이며, 추상 클래스가 부모클래스가 된다. - 추상 클래스의 선언 추상클래스를 선언할 때는 클래스 선언에 abstract 키워드를 붙여야 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package chapter07_03; public abstract class phone { // 필드 public String owner; // 생성자 public phone(String owner) { this.owner = owner; } // 메소드 public void t..
일반적으로 객체 지향 프로그래밍에서는 객체의 필드를 객체외부에서 직접적으로 접근하는 것을 막는다. 그 이유는 외부에서 마음대로 변경할 경우 객체의 무결성이 깨질 수 있기 때문이다. 예를 들면 자동차의 속력은 0이 될 수 없는데 외부에서 음수로 변경하면 객체의 무결성을 상실하게 된다. 이러한 문제점을 해결하기 위해서 객체 지향 프로그래밍에서는 메소드를 통해서 필드를 변경하는 방법을 선호하는데 필드는 외부에서 접근 할 수 없도록 막고 메소드를 공개해서 외부에서 메소드를 통해 필드에 접근하도록 유도한다. 이때 클래스를 선언할 때 필드를 private로 선언해서 외부로부터 보호하고, 필드에 대한 Setter와 Getter 메소드를 작성해서 필드값을 안전하게 변경/사용 하는 것이 좋다. 예시 코드 1 2 3 4 ..
1. 클래스의 접근제한 - dafault 접근제한 : 같은 패키지에서는 아무런 제한 없이 사용가능하지만 다른 패키지에서는 사용불가 - public 접근제한 : 같은 패키지뿐만 아니라 다른 패키지에서도 아무런 제한 없이 사용가능 클래스의 접근제한은 위의 2가지만 사용할 수 있으며 private 등과 같은 접근제한자는 사용할 수 없다. 2. 생성자, 필드, 메소드 접근제한 - public 접근제한 : 모든 패키지에서 아무런 제한없이 생성자, 필드, 메소드를 호출할 수 있음 - default 접근제한 : 같은패키지에서는 제한 없이 생성자, 필드, 메소드를 호출할 수 있으나 다른 패키지에서는 호출 할 수 없음 - protected 접근제한 : default 접근 제한과 마찬가지로같은 패키지에 속하는 클래스에서는..