Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- rxjava cold observable
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 유닛 테스트 예시
- jvm이란
- 플러터 설치 2022
- 안드로이드 라이선스
- 안드로이드 레트로핏 사용법
- 2022 플러터 설치
- ar vr 차이
- 큐 자바 코드
- 안드로이드 라이선스 종류
- android ar 개발
- 안드로이드 레트로핏 crud
- rxjava disposable
- 서비스 vs 쓰레드
- 스택 자바 코드
- 스택 큐 차이
- 안드로이드 유닛테스트란
- android retrofit login
- jvm 작동 원리
- 서비스 쓰레드 차이
- 클래스
- ANR이란
- 안드로이드 os 구조
- rxjava hot observable
- 안드로이드 유닛 테스트
- Rxjava Observable
- 자바 다형성
- 멤버변수
- 객체
Archives
- Today
- Total
나만을 위한 블로그
[JAVA] 다형성이란? 본문
728x90
반응형
다형성 : 같은 종(種)의 생물이면서도 어떤 형태나 형질이 다양하게 나타나는 현상. 예를 들면 암수에 따라 크기, 형태, 색깔 따위가 차이 나는 것이다
다형성은 객체지향언어인 자바에서 상속과 함께 중요한 개념 중 하나다.
사전적 의미로는 같은 종이면서도 형태, 성질이 다양하게 나타나는 현상을 말하는데, 자바에서는 한 타입(자료형)의 참조변수로 여러 타입의 객체를 참조할 수 있도록 구현한 기능이다.
말로는 잘 모르겠다. 예시 코드를 보면서 확인해보자.
public interface Lol
{
void sayMyName();
void q_skill();
void w_skill();
void e_skill();
void r_skill();
}
롤이라는 5:5 온라인 전투 게임을 모티브로 인터페이스를 만들어봤다.
게임에선 각 유닛들은 기본적으로 4개의 고유 스킬을 가져서 이를 사용해 상대방을 공격할 수 있다. 이 스킬들은 각각 q, w, e, r 4개 키로 사용할 수 있어서 이렇게 인터페이스를 만들었다.
그리고 각 챔피언의 이름을 출력하기 위해 name()이라는 추상 메서드도 만들었다.
다음은 이 인터페이스를 상속받는 클래스를 만들고, 그 클래스에 이 메서드들을 오버라이딩해서 각 챔피언 별 고유 스킬을 만들 것이다.
public class Velkoz implements Lol
{
@Override
public void sayMyName()
{
System.out.println("챔피언명 : 벨코즈");
}
@Override
public void q_skill()
{
System.out.println("Q : 플라즈마 분열");
}
@Override
public void w_skill()
{
System.out.println("W : 공허 균열");
}
@Override
public void e_skill()
{
System.out.println("E : 지각 붕괴");
}
@Override
public void r_skill()
{
System.out.println("R : 생물 분해 광선");
}
}
public class Garen implements Lol
{
@Override
public void sayMyName()
{
System.out.println("챔피언명 : 가렌");
}
@Override
public void q_skill()
{
System.out.println("Q : 결정타");
}
@Override
public void w_skill()
{
System.out.println("W : 용기");
}
@Override
public void e_skill()
{
System.out.println("E : 심판");
}
@Override
public void r_skill()
{
System.out.println("R : 데마시아의 정의");
}
}
두 명의 실제 유닛들을 모티브로 클래스를 만들었다. Lol 인터페이스를 implements한 다음, 인터페이스 안의 추상메서드들을 재정의했다. 이제 이 메서드들을 각각 호출하면 챔피언 별 고유 스킬명들을 출력할 것이다.
public class Main
{
public static void main(String[] args)
{
Lol lol;
System.out.println("정의의 전장에서 같이 싸울 챔피언을 선택해 주세요!\n\n1. 벨코즈 2. 가렌");
// 사용자에게 입력받기 위한 스캐너 객체 선언
Scanner scanner = new Scanner(System.in);
// 입력된 숫자는 selectedNum에 저장된다
int selectedNum = scanner.nextInt();
// selectedNum에 저장된 숫자에 따라 다른 결과를 출력한다
switch (selectedNum)
{
case 1 :
lol = new Velkoz();
lol.sayMyName();
lol.q_skill();
lol.w_skill();
lol.e_skill();
lol.r_skill();
break;
case 2 :
lol = new Garen();
lol.sayMyName();
lol.q_skill();
lol.w_skill();
lol.e_skill();
lol.r_skill();
break;
default:
break;
}
}
}
이제 위 코드를 실행해보자. 1을 입력할 경우, 2를 입력할 경우를 각각 나눠서 보면 아래와 같다.
이렇게 1 또는 2를 입력한 것만으로 Lol 인터페이스에 있던 메서드들이 유닛에게 재정의되어, 그 유닛의 고유 스킬명들을 출력하는 걸 볼 수 있다. 중요한 개념이지만 그렇게 이해하기 어렵지 않은 내용이다.
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 클래스란? 객체란? (0) | 2020.12.19 |
---|---|
[JAVA] 메서드란? (0) | 2020.12.13 |
[JAVA] 이클립스에 다크 테마 적용하는 법 (0) | 2020.12.10 |
[JAVA] 이클립스에서 폴더 프로젝트를 임포트하는 방법 (0) | 2020.12.09 |
[JAVA] 쓰레드의 동기화 (synchronized) (0) | 2020.10.25 |
Comments