오늘은 추상 클래스(Abstract Class)와 인터페이스(Interface)를 중심으로 객체지향 개념을 정리했다.
개념 위주의 수업이었지만, 나중에 정말 많이 쓰일 것 같은 내용들이라 중요하다고 느꼈다.
추상 클래스란 인스턴스를 생성할 수 없는 클래스이다.
추상 클래스를 상속받은 자식 클래스가 인스턴스가 된다.
abstract 키워드를 사용public abstract class 클래스명 {
}
부모 클래스에서 일반 메서드로 구현해두면
자식 클래스에서 사용하지 않는 경우가 발생할 수 있다.
→ 이를 방지하기 위해 추상 메서드를 사용한다.
{} 가 없음public abstract class Shape {
protected String color;
public Shape(String color) {
this.color = color;
}
// 추상 메서드
public abstract double getArea();
public abstract double getPerimeter();
// 일반 메서드
public void displayColor() {
System.out.println("색상: " + color);
}
}
public class ShapeExam {
public static void main(String[] args) {
Shape shape = new Circle("red", 5.21);
System.out.println(shape.getArea());
System.out.println(shape.getPerimeter());
}
}
인터페이스는 상속 관계는 아니지만 기능을 통일화하기 위한 개념이다.
예를 들어:
→ 이럴 때 fly 인터페이스로 기능을 통일할 수 있다.
.javapublic static finalpublic abstractabstract, final 키워드는 생략 가능default 메서드static 메서드public interface 인터페이스명 {
}
public interface Smartphone {
void turnOn();
void turnOff();
default void reset() {
System.out.println("기본설정으로 초기화");
turnOff();
turnOn();
}
static void showInfo() {
System.out.println("스마트 기기 인터페이스");
}
}
public class SmartPhoneExam implements Smartphone {
@Override
public void turnOn() {
System.out.println("스마트폰 전원 ON");
}
@Override
public void turnOff() {
System.out.println("스마트폰 전원 OFF");
}
@Override
public void reset() {
System.out.println("스마트폰 공장 초기화 진행...");
turnOff();
turnOn();
}
}
public class UseSmartPhone {
public static void main(String[] args) {
SmartPhoneExam smart = new SmartPhoneExam();
Smartphone.showInfo();
smart.turnOn();
smart.reset();
}
}
public class MyClass implements A, B {
}
public interface Advanced extends Drawable, Resizable {
}
클래스 로더
→ new 없이도 클래스를 로딩
@Deprecated
→ 사용 비권장, 향후 제거 예정
람다 인터페이스
→ 메서드 하나만 가진 인터페이스
→ JDK 8 추가, 컴파일 시 객체로 감싸짐
Object 클래스
→ 모든 클래스의 최상위 부모
익명 클래스
→ 이름 없는 클래스, 일회용 객체
→ UI 이벤트, 스레드 등 단발성 처리에 사용
→ 오버라이딩한 메서드만 사용 가능
캡슐화
→ 내부 데이터를 숨기고 보호
→ private + getter/setter 사용
템플릿 메서드 패턴
→ 부모 클래스에서 흐름 정의
→ 자식에서 구현
→ final 메서드는 오버라이딩 불가
오늘도 개념 위주의 수업이었는데
추상 클래스와 인터페이스는 나중에 정말 중요해질 개념이라는 생각이 들었다.
이론만으로는 부족할 것 같고,
앞으로 예제 코드와 실습을 통해 여러 번 사용해보면서 익숙해져야겠다.