brunch

You can make anything
by writing

C.S.Lewis

인터페이스-2

* 이 내용은 철저히 초심자를 위해 알기 쉽게 설명하는 것을 목적으로 하고 있습니다.

* 더 정확하고 자세한 개념은 다른 고수님들의 글들을 참고하시길 바랍니다.

* 그리고 이 글에서는 코드 최소한으로 다루고 있습니다.


앞에서 우리는 인터페이스와 추상클래스의 차이에 대해서 알아보았습니다.

클래스는 분류의 개념이므로 필요한 규격이 여러 개일 경우 하나씩 상속을 받으며 추가해야 했다면, 인터페이스는 모듈 개념으로 필요한 규격을 한 번에 모두 가져와 사용 가능 했습니다.

이 모듈개념으로 인해 인터페이스는 클래스가 할 수 없는 또 다른 한 가지를 할 수 있습니다.


바로 다중 상속입니다.

우리가 USB C라는 규격을 새로 만든다고 가정해 보겠습니다. 그리고 이미 있는 규격들을 조합하여 만들 예정입니다.


이때 다른 규격을 가진 인터페이스들을 한 번에 불러와 상속한다면 이 규격을 사용하는 사람 입장에서는 UsbC 인터페이스만 구현받으면 3가지 규격을 모두 사용할 수 있게 됩니다.


이렇게 규격을 강제화 시키는 추상화의 방식들인 인터페이스와 추상 클래스에 대해 알아보았습니다.

그런데 규격은 말 그대로 정해놓은 룰 일뿐, 실제 하진 않죠? 그래서 지금까지의 내용을 보면 추상 클래스나 인터페이스를 상속받거나 구현받는 클래스가 있었습니다.

그리고 그 클래스들은 자신들이 상속받거나 구현받은 것들의 추상 메서드를 강제 오버라이드 하였습니다.

이 클래스를 우리는 실체 클래스(concrete class)라고 부릅니다.

추상 메서드를 오버라이드 하여 실체화시키기 때문에 붙여진 이름입니다.


이를테면 USB C 타입이라는 규격을 가지고 고속 충전기라는 실체가 있는 물건을 만드는 것처럼요.

그럼 이 충전기는 사람들이 두고두고 편리하게 사용할 것입니다.


이렇게 실체 클래스(Concrete class)가 있기에 이 클래스를 객체화하여 여러 사람들이 이곳저곳에서 사용할 수 있는 것입니다.


하지만 1회용 종이컵처럼 혼자서 그 자리에서 쓰고 버리는 물건도 있죠?

이 경우 규격을 실체화하는 클래스를 따로 만드는 것 자체가 낭비처럼 느껴질 수 있습니다.

그래서 위와 같이 실체 클래스 없이 규격을 이용해 즉석으로 객체를 생성하기도 합니다.

여러분들도 아시다시피 프로그래밍의 세계에서 { 로 시작하면 }까지 가는 속성이 있습니다. 그리고 세미콜론(;) 이 찍히면 바로 실행한다는 뜻입니다.

즉, 위 코드는 '1회용컵규격' 을 가지고 실체 클래스 없이 즉석 객체를 만들어 실행하라는 뜻입니다.


모든 객체는 복사할 원본 클래스가 존재하죠?

그런데 위의 코드에서는 해당 클래스 없이 즉석에서 객체를 생성하였습니다. 그럼 이 객체의 원본 클래스의 이름은 무엇인가요? 

이름이 없습니다.

그래서 이 즉석 객체는 원본이 되는 클래스의 이름이 없다 하여 익명(anonymous) 객체라고 부릅니다.


설명이 조금 복잡했나요?

우리가 일상생활에서 누군가의 이름을 알려고 할 때가 언제인지 생각해 보면 왜 익명 객체라는 녀석을 사용하는지 알 수 있습니다.

일단 우리에게 이름이 필요한 경우는 1회성이 아닌 여러 번 만나야 할 경우입니다.

그래서 스쳐 지나가는 사람의 이름을 알려고 하진 않습니다. 하지만 내가 관심이 생겨 자주 보고 싶다면 이름을 알려고 할 겁니다.

그래서 사업상으로 만날 경우도 나중에 또 볼 것을 대비해 명함을 주고받죠?


익명 객체도 마찬가지입니다.

해당 클래스를 객체화하여 사용하는 곳이 여러 곳이라면 당연히 클래스를 따로 만들어 두루 부를 수 있게 해줘야 합니다.

하지만 당장 여기서만 객체화하여 사용하고 말 거라면 따로 클래스를 만들 수고는 필요 없겠죠?


이렇게 인터페이스에 대해서도 추가로 알아보았는데요. 추상화를 사용하면 규격을 잡아 표준화된 코드를 만들어 낼 수 있다는 장점, 잘 아시겠죠?

하지만 실제적으로 어떻게 사용했을 때 유용하다는 건 잘 와닿지 않는다고요?

그럼 다음에는 이 추상화를 사용하면 코드 상에 어떤 점이 좋은지 한번 알아보도록 하겠습니다.

매거진의 이전글 인터페이스 - 1
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari