[LIKELION] 220927

고관운·2022년 9월 27일

회고

😄 느낀점

  • 다형성 이해하기 위해 내용 추가
  • 추상 클래스 및 인터페이스 특징 알고가기
  • 인터페이스는 객체를 어떻게 구성해야 하는지 정리한 설계도!

😁 목표

  • 과제 2개 완료하기 (선택정렬, 스택)
  • 백준 코딩 연습

01. 자바-13-다형성 내용 추가

다형성의 이해

1.

class Shape {
	public void answer() {
		System.out.println("Shape answer");
	}
}

class Circle extends Shape {
	@Override
	public void answer() {
		System.out.println("Circle answer");
	}
    
    public void question() {
		System.out.println("Circle question");
	}
}

🟢 Shape shape = new Circle() 객체 생성 후, shape.question(); 입력시 오류 발생 (Shape 클래스에서 없는 함수이기 때문임)

2.

class Cake {
	public void yummy() {
		System.out.println("Yummy Cake");
	}
}

class CheeseCake extends Cake {
	public void yummy() {
		System.out.println("Yummy Cheese Cake");
	}
}

public class java_13_p8 {

	public static void main(String[] args) {
		Cake c1 = new CheeseCake();
		CheeseCake c2 = new CheeseCake();
		
		c1.yummy();
		c2.yummy();
	}
}

🟢 Yummy Cheese Cake 2번 출력
(오버라이딩된 자식의 함수가 호출됨)
🟢 다형성이 적용되고 오버라이딩이 적용되었을 때, 상위클래스의 함수를 가져오고 싶다면 super 이용

업케스팅 & 다운 케스팅

업케스팅

다형성을 이용하여 부모 = 자식으로 업케스팅

다운 케스팅

Shape circleShape = new Circle(10);
Circle circle = (Circle) circleShape;
System.out.println(circle.getArea());

🟢 2가지 조건
1. 미리 자식으로 메모리에 올라가 있어야 함
2. (Circle)과 같이 형변환이 없으면 에러 발생

다형성의 활용

함수의 매개변수

함수의 매개변수에 상위 클래스를 설정하면, 하위 클래스를 매개변수로 받을 수 있음

instanceof

  • 객체의 실제 타입을 알 수 있음 (true, false 리턴)
  • 변수명 instanceof 데이터타입으로 사용
  • 오직 참조형 변수에만 사용 가능
  • 🔴 사용 불가능 타입 : int, byte, short, long, float, double, boolean, char

02. 자바-14-인터페이스

추상 클래스

추상 클래스란

추상 클래스 : 하나 이상의 추상 메소드를 포함하는 클래스
추상 메소드 : 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드 (미완성 메소드)
🟢 클래스와 메소드 앞에 abstract를 붙임

추상 클래스 특징

  • 추상 클래스는 객체 생성 불가능 (단, 참조변수 선언 가능)
  • 추상 클래스는 최소 한개의 추상 메소드를 가짐
  • 상속을 해서 추상 함수를 오버라이딩해줘야 함(오버라이딩을 하지 않으면 오류 발생)

추상 클래스를 사용하는 이유

일반 메소드로 정의되면 자식 클래스에서 오버라이딩하지 않아도 컴파일러가 체크할 방법이 없음

인터페이스

인터페이스란

객체를 어떻게 구성해야 하는지 정리한 설계도

인터페이스 특징

  • 인터페이스 정의는 class 대신 interface를 작성
  • 메소드에 몸체가 없음 (추상 클래스와 다르게 abstract 생략 가능)
  • 객체 생성 불가 (단, 참조변수로 선언 가능)
  • 몸체가 없는 함수가 있기 때문에, 자식이 구현해야 함 (이때 상속은 implements)
  • 인터페이스는 변수 선언 안됨 (변수 선언시 초기화까지 해야 가능)
  • 다중 상속 가능 (extends 상속은 불가능)

디폴트 메소드

디폴트 메소드란

인터페이스의 일반함수(구현된 함수)

NULL

  • Null은 참조형에만 대입 가능
  • Null을 넣을 시 가르키는 주소값이 없음을 의미
  • GC(가비지 콜렉터)로 하여금 해당 메모리를 회수해도 좋다는 의미

실습. 다중상속(interface)

interface Driable {
	void drive();
}

interface Flyable {
	void fly();
}

class FlyingCar implements Driable, Flyable{

	@Override
	public void fly() {
		System.out.println("날 수 있습니다.");
	}

	@Override
	public void drive() {
		System.out.println("드라이브가 가능합니다.");
	}
	
}

public class java_14_p12 {

	public static void main(String[] args) {
		FlyingCar flyingCar = new FlyingCar();
		
		flyingCar.drive();
		flyingCar.fly();

	}
}

🟢 class FlyingCar implements Driable, FlyableDriableFlyable 인터페이스를 동시에 상속

0개의 댓글