[Developer] 초보 개발자

인터페이스란? 추상클래스란? 초보개발자

OnceBH 2021. 4. 17. 02:20
반응형

인터페이스란? 추상클래스란? 초보개발자

개발공부 인터페이스와 추상클래스

 

코딩을 하다 보면 항상 이러한 생각이 듭니다.

"작동은 잘하는데, 코드가 너무 보기 싫어...' 혹은 "작동은 잘 하는데, 이걸 좀 더 짧게 쓸 수 있을 거 같은데"

등등... 그럴 때 패턴을 알아놓으시면 참 좋을 것 같습니다.

그리고 이러한 패턴을 이용하려면 인터페이스와 추상 클래스를 사용하게 될 날이 올 것입니다.

 

코딩을 하면서 결과적으로 문제없이 프로그램이 작동한다면,

사실 그게 가장 중요할지 모릅니다.

하지만 그다음 생각해야 할 부분들도 문제없이 프로그램을 작동시키는 것만큼 중요합니다.

저는 크게 2가지로 생각이 됩니다.

 

1. 코드의 간략화(가독성)와 캡슐화.

2. 유지보수.

 

이를 위해서는 인터페이스와 추상 클래스를 사용할 줄 알아야 할 것입니다.

당연히 일반적으로 쉽게 생각한다면, 필요한 클래스를 생성하고 필요한 함수를 지정한 뒤

필요한 곳에 사용하면 그걸로 끝입니다. 하지만 그중 분명히 중복되거나 비슷한 기능을 하는 코드들이

생기기 마련입니다. 그리고 이러한 클래스, 혹은 함수들은 묶어서 청사진을 관련된 클래스들에게 나누어준다면

그리고 이렇게 청사진을 받은 클래스는 각자의 입맛에 따라 필요하게 가공하여 사용한다면,

코드도 훨씬 간략해지고 유지보수면에서도 좋을 것입니다.

 

인터페이스와 추상 클래스를 사용하는 방법은 전혀 어렵지 않습니다.

인터페이스와 추상 클래스는 직접 사용될 클래스에 청사진을 제공해주는 것이라고 생각합시다.

(당연히 이 둘은 차이가 존재합니다. 하지만 처음 가장 쉽게 생각하기 위해서입니다.)

 

자 아래의 클래스 다이어그램을 보시죠.

개발공부 인터페이스와 추상클래스

 

Dog라는 클래스를 밑으로 쉐퍼드, 불도그, 골든 레트리버라는 강아지 클래스들이 존재합니다.

그리고 이들은 모두 같은 함수를 가지고 있으며, 이 함수는 Dog 클래스에서 온 것입니다.

그리고 아래 3개의 클래스는 Dog라는 클래스를 부모 클래스로 두고 있는 자식 클래스들입니다.

이를 상속이라고 합니다.

 

자 그럼 여기서 본격적으로 들어가기 전 정말 쉽게 생각해봅시다.

강아지란 무엇인가요? 우리는 강아지라는 그 존재 자체를 본 적이 있을까요??

우리는 쉐퍼드, 불도그, 골든 레트리버가 강아지의 종류들 중 하나이다 라는 것을 알뿐

강아지 그 자체의 모습과 존재는 보지 못했습니다. 하지만 우리들이 생각하기에,

아 다리가 4개가 있고, 털이 있으며, 멍멍하고 짓는 동물. 이것은 강아지이다.라고 인지한 뒤

쉐퍼드, 불도그, 골든 레트리버와 같은 동물을 보고 강아지라고 말하는 것입니다.

바로 이게 포인트입니다.

우리는 강아지 그 자체의 존재는 모르지만, 강아지라고 불리는 동물의 특성, 생김새, 행동은 알고 있습니다.

즉 여기서 Dog라는 클래스는 단지 청사진에 불과하다는 것입니다.

Dog 클래스는 부모 클래스로써 자식에게 필요한 특성과 행동을 물려주는 것입니다.

 

자 그렇다면 인터페이스와 추상 클래스의 차이를 알아보겠습니다.

 

둘 다 부모 클래스로 자식 클래스에게 자신이 가지고 있는 것을 상속해준다는 것은 같습니다.

 

인터페이스.

 

  1. 키워드를 필요로 하지 않는다.(함수 등을 정의할 때 따로 앞에 interface라는 키워드가 필요하지 않습니다.)
  2. 다중 상속.
  3. 함수는 속이 빈 껍데기여야 한다.(언어의 따라 어느 정도 차이가 있을 수 있습니다.)
  4. new 연산자를 사용할 수 없다.

추상 클래스.

 

  1. abstract라는 키워드를 사용 가능하다.
  2. 단일 상속.
  3. 일반 변수를 가질 수 있다.
  4. 부모 클래스로써 존재하지만 사실 자식 클래스의 확장성을 높이고 직접적인 사용을 위한다.

정도 될 것입니다.

(혹시 다른 부분이나 변경되어야 할 부분이 있다면 언제나 댓글 달아주세요.)

 

오늘은 이렇게 간단히 인터페이스와 추상 클래스를 알아보았습니다.

처음 OOP를 공부하신다면 당연히 난해할 것입니다.

왜 이렇고 어떤 때 무엇을 이용해야 하고, 왜 필요할까??

이는 차근차근 공부를 하시다 보면 그 필요성을 알게 되시고,

자연스럽게 디자인 패턴도 공부하게 되시지 않을까 싶습니다.

디자인 패턴을 보시면 각 패턴의 특징들이 존재하고, 어떤 상황에 어떤 패턴이

알맞을지 알게 되며, 이를 내가 하는 프로젝트 혹은 사이드 프로젝트에 어떤 패턴을

적용시킬지 고민하게 될 것입니다.

그리고 어떤 패턴이 적용될지 결정하셨다면, 제일 처음 하실 일은

코딩이 아니라  UML을 이용하여 설계하시는 것입니다.

어떤 클래스에 어떤 속성, 함수가 필요한지, 어떤 형태로 어디서 어떤 클래스의 객체가 만들어져야 할지

어떤 클래스끼리 묶어서 상속받아야 할지 혹은 상속해야 할지 등등.

개발 공부는 참 끝이 없는 것 같습니다.

저도 여러분들과 같이 하나씩 배워가기 위해 글을 작성하는데, 언제든지 틀린 부분이나

다른 부분을 알려주시면, 찾아보고 수정할 수 있도록 하겠습니다.

또한 제가 윗부분에 언급한 강아지는 객체를 이야기할때보 잘 들어맞을 것 같습니다.

 

항상 처음이 가장 힘듭니다. 시작하겠다는 마음을 먹는 것보다 당장에 시작하는 게 더 좋습니다.

여러분도 시작해야지 하고 마음만 먹으시는 것이 아니라 당장 조금씩이라도 실천하실 수 있는

용기를 꼭 가지시기 바랍니다.

 

완벽한 준비란 없다, 완벽한 준비란 영원히 시작하지 않는 것과 같다.

Es gibt keine perfekte Vorbereitung.

Perfekte Vorbereitung ist das Gleiche, wie nie anzufangen. 

반응형