인터페이스4

|

타입변환과 다형성

다형성이란?? 상속때부터 계속해서 나온 녀석이다. 상속 뿐만 아니라 앞에 말 했듯 인터페이스도 다형성을 구현 하는데에 사용된다. 

요즘은 상속보다 인터페이스가 다형성을 구현 하는데 많이 사용된다고 한다.

다형성은 하나의 타입에 대입되는 객체에 따라 다양한 결과가 나오는 것을 말한다. 

상속에서 부모 타입에 어떤 자식객체를 대입하는지에 따라 결과가 달라지 듯. 인터페이스에서는 인터페이스에 어떤 구현객체를 대입하느냐에 따라 다양한 결과가 나온다. 

다른 점은 개념적인 부분인데

상속은 같은 종류의 하위클래스를 만드는 것.

인터페이스는 사용법이 동일한 클래스를 만드는 것

이라는 부분이 다른것이다. 

상속의 경우 종류가 같은 하위 클래스를 만들고 자동타입변환을 통해 다형성을 사용하는 것이고

인터페이스의 경우 동일한 사용법의 클래스(구현객체)를 만들어 인터페이스에 대입하면서 다형성을 구현하는 것.

이 부분이 다른 듯 하다 물론 내 생각일 뿐이다. 

앞에 인터페이스를 배우면서 알았겠지만 인터페이스를 사용하면서 구현객체를 바꾸어 대입하기만 하면 되니 쉽고 빠르게  다형성을 구현할 수있다.

인터페이스는 메소드의 매개변수로 많이 등장한다고 한다. 

인터페이스 타입으로 매개 변수를 선언 하면 매개값으로 구현 객체만 바꾸면서 여러 결과값을 얻을 수 있다. 

이게 매개변수의 다형성이다.예를 들어보자

 

useRemoteControl()이 라는 메소드의 매개변수로 RemoteControl인터페이스타입을 사용한다고 하자 

이 매개변수의 값으로 구현객체 Television와 Audio를 사용할 수 있다. 구현객체의 내용은 다를 태니 나오는 결과값도 다를 것이다. 


'Java' 카테고리의 다른 글

인터페이스4  (0) 2019.01.19
인터페이스3  (0) 2019.01.18
인터페이스(Interface)2  (0) 2018.12.31
인터페이스 (Interface)  (0) 2018.12.29
추상클래스(abstract)  (0) 2018.12.23
강제타입변환 Casting 및 몇가지  (0) 2018.12.22
Trackback 0 And Comment 0

인터페이스3

|

인터페이스 사용

인터페이스를 사용할때 인터페이스의 변수를 선언 하고 구현 객체를 대입하하는 방법으로 사용한다.

예) 인터페이스 변수명;             인터페이스 변수 = new 구현객체();

변수 = new 구현객체();

예를 들어 RemoteControl 이라는 인터페이스에 

구현객체 Television과 Audio를 대입해보자

RemoteControl rc;

rc = new Television();

rc = new Audio();

이 뿐만 아니라 개발시 인터페이스는 클래스의 필드, 생성자와 메소드의 매개변수, 생성자와 메소드의 로컬 변수로 사용이 가능하다. 

public class MyClass{

// 필드

RemoteControl rc = new Television();


//생성자

MyClass(RemoteControl rc){                <<-  main에서 MyClass mc = new MyClass(new Television()); 

this.rc = rc;                                        어떤 구현 객체든 올 수 있다.

}


//메소드

void methodA(){

//로컬 변수

RemoteControl rc = new Audio();

}


void methodB(RemoteControl rc){             <<- main에서 mc.methodB(new Audio());

}

}

위의 어떤 구현 객체 든 올 수 있다는 말은 지금은 기억 안나 지만 예전에 상속에 대해 배울때 클래스 타입이 매개변수로 온다면 

그 클래스를 상속받은 자식 클래스도 사용할 수 있다고 했다.

이와 같이 참조 타입인 인터페이스를 매개 변수로 쓴다면 여기에 어떠한 구현객체든 들어올수 있다. 

결국 모양은 RemoteControl rc = new 구현객체(); 가 되기 때문이다.


추상메소드의 사용

구현 객체가 인터페이스 타입에 대입되면 인터페이스에 선언된 추상 메소드를 코드에서 호출할 수 있게 된다. 이 추상 메소드를 호출 하면 구현객체의 추상메소드를 구현화한 메소드가 자동으로 호출된다. 

예를 들어  RemoteControl 이라는 인터페이스에 추상메소드 turnOn();, turnOFF() 가 있다. 그리고 구현 객체에서 구현해 대입했다면 

개발 코드에서 이 추상 메소드를 호출했을때 자동으로 구현객체에 있는 구현된 turnOn();와 turnOFF();메소드가 호출된다.

RemoteControl rc = new Television();

rc.turnOn(); >> Television의turnOn() 실행

rc.turnOff(); >> Television의turnOff() 실행


디폴트메소드 사용

디폴트메소드는 자바8부터 추가된 녀석이다.  인터페이스에서는 추상 메소드만 넣는 다는 규칙을 깨고 이녀석은 구현부분을 다 가지고 있다. 

선언 방법은 default void 메소드명 (){.....}<< 이런 식

인터페이스에 선언된 구현 코드를 가진 메소드니까 호출할 때는??

만약 RemoteControl 이라는 인터페이스에 setMute라는 디폴트 메소드가 있다고 하자 그렇다면 메인 클래스에서 RemoteControl.setMute();<<이걸 로 호출이 가능할까? 정답은 아.니.다.

이녀석은 추상 메소드가 아닌 인스턴스 메소드 이므로 구현 객체가 있어야 사용이 가능하다. 

그러니까 RemoteControl에 구현 클래스 Television이 있다고 하자 

그렇다면 메인에서 RemoteControl rc = new Television();<<이런 식으로 구현 객체를 대입한 뒤 

rc.setMute(....)<<이런 방법으로 사용이 가능한것.

물론 이녀석은 인터페이스에서 이미 구현이 되어 있기 때문에 굳이 구현 객체에서 따로 선언하지 않아도된다. 그냥 구현객체가 대입만 되있으면됨.

그러니까 이녀석은 RemoteControl인터페이스에 대입하는 모든 구현객체에서 호출이 가능하다. 인터페이스의 모든 구현객체가 가지고있는 기본(default)메소드 라고 생각하면 된다.

만약 어떤 구현객체에서 이녀석이 맞지 않다고 할 경우 재정의 도 가능하다. 

이런 모양으로 인터페이스에서 디폴트 메소드가 선언되어 있을때

default void setMute(boolean mute) {

if(true){

System.out.println("나는 디폴트 메소드");

}

}

구현객체 에서 재정의 한다면?? 어떤 모양이 될까>

@Override

public void setMute(boolean mute) {

...........

}

인터페이스에서 디폴트메소드를 선언할때는 default를 사용하지만 재정의 할때는 그냥 public void를 사용하면된다.


정적메소드 사용

디폴트메소드와 같이 자바8에서 나온 기능이다. 마찬가지로 인터페이스 내부에서 구현까지된다. 다른점은 디폴트 메소드의 경우 메인 메소드에서 인터페이스 타입에 구현객체를 대입해야만 사용할 수 있었지만 정적메소드는 그냥 바로 사용 할 수있다.

인터페이스 RemoteControl의 안에 정적 메소드changeBattery가 선언되있다고 하자


public interface RemoteControl {

//정적메소드

static void changeBattery() {

System.out.println("건전지를 교환합니다.");

}

}


이때 메인 메소드에서 정적 메소드를 호출 하려면??

public static void main(String[] args) {

RemoteControl.changeBattery(); 

}

이거면 된다. 

 

'Java' 카테고리의 다른 글

인터페이스4  (0) 2019.01.19
인터페이스3  (0) 2019.01.18
인터페이스(Interface)2  (0) 2018.12.31
인터페이스 (Interface)  (0) 2018.12.29
추상클래스(abstract)  (0) 2018.12.23
강제타입변환 Casting 및 몇가지  (0) 2018.12.22
Trackback 0 And Comment 0

2. 중앙동

|

중앙동

부산에서 태어나 부산에서 살아온 나에게 중앙동이란? 

저번의 초량과 다를 바 없다. 외국에 가기위해 배를타러 갈때 들르는 곳, 남포동 가는길에 있는곳.

그저 여느 동네와 다를바없는 그런 곳 그것이 중앙동 이였다.


우연히 출입국 관리소에 갈 일이 생겼다.

와.. 중앙동 갔다가 남포동이나 갈까?? 라고 생각하면서 지하철을 올라온순간 날 반긴것은 차갑디 차가운 바람이였다. 바다 근처라 그런가 중앙동의 바람은 다른곳 보다 거센 느낌 이였다. 


우연히 중앙동 40계단 거리라는 곳을 보았다. 초량동에 168계단의 짝퉁인가?? 40계단 가지고 뭘 거리까지 만들었나??

라고 생각하면서 검색해보자 남포동으로 가는 길목에 있더라. 그럼 구경이나갈까? 라고 생각하면서 바람을 맞으며 걸었다. 

40계단 거리에 들어서고 처음 본 높은 계단 화려한 모습에 아 이게 40계단인가? 라고 생각했지만 쟌넨.. 

40계단 기념관에 가는 길이였다

 

168계단의 짝퉁? 이라고 생각한 내 머리를 때렸다. 전쟁이 나고 부산으로 사람들이 밀려와 가족과 헤어지고 집을 잃었을 때 이곳에는 판자촌이 형성되었다고 한다. 이곳을 기점으로 사람들은 다시 힘을 내고 살아가며 헤어진 가족을 기다렸다고 한다. 그런곳이 바로 이곳 40계단 이다.

텍스트를 읽으면 알겠지만 한번 소실되고 위치를 바꾸었다고 한다. 하지만 어떠하랴 가족을 기다리고 구호물품을 나르던 어머니들의 모습은 이곳에 남아 그날의 슬픔과 작은 기쁨들을 간직하고 있었다.

40계단 기념관을 나와 오른쪽으로 직진하면 40계단이 나온다. 

기념관을 돌고 나와 거리를 걸으니 거리가 새롭게 보인다. 간판도, 가게도 마치 그때 그곳을 기억하는듯

그저 낡아버린 거리가 아닌듯한 기분이였다. 

40계단이다 아주 짧지만 그속에 들어있는 이야기는 절대 짧지 않다

계단 중앙에 있는 악사의 동상 뒤에있는 것은 스피커로 노래가 나온다.

거리 이곳 저곳에 그시절을 보는 듯한 동상들이 세워져있다. 

열심히 걸으니 어느덧 40계단길이 끝나 버린다. 

아쉬움이 남아 고민하던 차에 근처에 용두산 공원이 있는것을 알고 그곳으로 향했다.

서울에 남산타워가 있다면 부산에는 용두산 공원의 부산 타워가 있다. 

그리고 그옆에는 정자의 모습을 한 투썸이... 뭔가 이상하다;;

찬바람을 맞으며 용두산 공원으로 가는 길은 그리 춥기만 하진 않았다. 40계단을 보며

옛사람들을 생각하며 한 발 한 발 걷다보니 어느세 용두산 공원이였다. 

갑작스래 가게된거라 부산타워를 오르진 않았다. 언젠가 혼자가 아니라 누군가의 손을 잡고 함께 가게된다면

그때 커피한잔을 들고 부산타워를 올라 석양을 보고싶다. 

부산 돌아보기, 그저 심심풀이로 시작한 이 일은 꽤 소소한 즐거움을 주고있다. 

그저 스처만 지나가던 장소들이 하나 하나 나의 추억의 장소로 변해가고

조금더 자세히 부산을 알게되면서 그저 생각없이 걷기만 하는것이 아니라 

많은 생각을 할 수 있게 되는 계기가 되는 중이다. 

부산은 즐겁다. 갑자기 할 일 없이 걷게 된다고 해도 어느곳이든 추억의 장소들이니까 


'부산돌아보기' 카테고리의 다른 글

2. 중앙동  (0) 2019.01.13
부산돌아보기 1. 초량동  (0) 2019.01.06
Trackback 0 And Comment 0
prev | 1 | 2 | 3 | 4 | ··· | 13 | next