///////
Search

다형성 추상클래스 인터페이스

작성 날짜
2022/09/27 06:49
작성자

다형성의 이해

캐스팅이란?

캐스팅(casting)이란 타입을 변환하는 것을 말하며 형변환이라고도 한다. 자바의 상속 관계에 있는 부모(슈퍼)와 자식(서브) 클래스 간에는 서로 간의 형변환이 가능하다.
자식 클래스 -> 부모 클래스 : 업캐스팅
부모 클래스 -> 자식 클래스 : 다운캐스팅

다형성이란?

다형성(Polymorphism)이란 하나의 타입에 여러 객체를 대입할 수 있다는 의미이다.

업캐스팅과 다형성

자바에서 서브 클래스는 슈퍼 클래스의 모든 특성을 상속받기 때문에, 서브 클래스는 슈퍼 클래스로 취급될 수 있다. 서브 클래스 객체가 슈퍼 클래스 타입으로 형변환 되는 것을 업캐스팅이라고 한다. 업캐스팅은 다형성과 관련이 깊다!

다운캐스팅이란?

업캐스팅과 반대로 캐스팅 하는 것을 다운캐스팅이라고 한다. 업캐스팅된 것을 다시 원상태로 돌리는 것을 말한다. 하위 클래스로의 다운캐스팅을 할때는 타입을 명시적으로 지정해줘야한다는 특징이 있다.

업캐스팅 다운캐스팅 예제

class Parent { void print(){ System.out.println("Parent 메소드 호출"); } } class Child extends Parent { @Override void print() { System.out.println("Child 메소드 호출"); } } public class Casting { public static void main(String[] args) { Parent p = new Child(); // 업캐스팅: 자식 객체를 부모 객체로 형변환 p.print(); // 동적 메소드 호출, 자식의 print()호출 //Child c = new Parent(); //컴파일 오류 Child c = (Child)p; // 다운캐스팅: 부모 객체를 자식 객체로 형변환 c.print(); // 메소드 오바리이딩, 자식 객체의 print() 호출 } }
Java
복사

다형성의 활용

매개 변수에 Shape 타입으로 선언하면 훨씬 넓은 범위의 객체를 받을 수 있다.
예시) void getArea(Shape shape) → Shape shape = new Triangle(10,10)이 되서
결국 위와 동일한 의미

instanceof 연산자

객체 타입을 확인하는 연산자로 형변환 가능여부를 확인하며 boolean타입으로 결과를 반환함 문법: 객체명 instanceof 클래스타입

추상 클래스

추상클래스란?

abstract = 추상의 미완성의 의미
자바에서는 하나 이상의 추상 메소드를 포함하는 클래스를
이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 하며 즉, 반드시 사용되어야 하는 메소드를 추상 클래스에 추상 메소드로 선언해 놓으면, 이 클래스를 상속받는 모든 클래스에서는 이 추상 메소드를 반드시 재정의해야 함

추상클래스 예제

public class AbstractTest { public static void main(String[] args) { FirstCat fc = new FirstCat(); SecondCat sc = new SecondCat(); fc.call(); sc.call(); } }//AbstractTest abstract class Cat{ // 추상 메서드를 포함하므로 추상클래스로 선언 abstract void call(); // 추상 메서드 선언(구현x) void call2(){ System.out.println("일반 메서드"); } } //Cat 추상클래스를 상속한 클래스들 class FirstCat extends Cat{ void call(){ //추상메서드는 서브클래스에서 반드시 재정의 되어야 함 System.out.println("첫번째 야옹이"); } } class SecondCat extends Cat{ void call(){ System.out.println("두번째 야옹이"); } }
Java
복사

추상클래스 용도

인터페이스(interface)

인터페이스란?

인터페이스는 객체를 어떻게 구성해야 하는지 정리한 설계도
인터페이스는 객체의 교환성(또는 다형성)을 높여줌
인터페이스 변수에 인터페이스가 구현된 서로 다른 구현 객체를 할당해서 사용이 가능함
구현 객체를 직접 몰라도 인터페이스 메서드만 알아도 객체 호출이 가능하게 함
객체가 인터페이스를 사용하면, 인터페이스 메서드를 반드시 구현해야 하는 제약을 함

인터페이스 장점

개발시간 단축 가능
표준화 가능
서로 관계없는 클래스들에게 관계를 맺어 줄 수 있음
독립적인 프로그래밍 가능

인터페이스 예제

interface Animal { //메소드의 몸체를 갖지 않음, 인스턴스 생성 불가, 참조변수 선언 가능 public abstract void cry(); //추상 메소드 } class Cat implements Animal { public void cry() { System.out.println("냐옹냐옹!"); } } class Dog implements Animal { public void cry() { System.out.println("멍멍!"); } } public class Polymorphism03 { public static void main(String[] args) { Cat c = new Cat(); Dog d = new Dog(); c.cry(); d.cry(); } }
Java
복사

다중상속

다중 상속이란?

다중상속(Multiple inheritance)이란 객체 지향 프로그래밍의 특징 중 하나
어떤 클래스가 하나 이상의 상위 클래스로부터 여러 가지 행동이나 특징을 상속 받을 수 있는 것을 의미

변수 종류

선언 위치에 따른 분류

인스턴스변수
클래스 영역에 선언되고
인스턴스 생성시 만들어짐
각각의 인스턴스마다 다른 값을 가질 수 있음
그러므로 인스턴스 생성이 필수이며 각 인스턴스마다 다른 값을 가져야 할 때 사용됨
클래스변수
인스턴스변수 앞에 static 을 붙인것
인스턴스변수가 각각의 인스턴스마다 다른값을 가질 수 있는 거와 달리 값을 공유하는 변수
클래스 로딩시 생성되며 클래스이름.변수이름 이렇게 인스턴스 생성 필요없이 바로 쓸 수 있음
지역변수
메소드 내에 선언되며 메소드 호출시 생성되고 메소드가 종료되면 사라짐
매개변수
흔히 파라미터라고 불리며, 메소드에서 입력값을 받을 때가 있는데 그때 사용되는 변수
매개변수도 매소드 내에 선언된 것으로 간주되므로 지역변수임
인자값은 호출시 메소드입력부의 넣는 값이며 이값은 매개변수에 복사되어 대입됨