저작권 안내: 저작권자표시 Yes 상업적이용 No 컨텐츠변경 No

스프링5 입문

JSP 2.3

JPA 입문

DDD Start

인프런 객체 지향 입문 강의

'concrete class'에 해당되는 글 1건

  1. 2013.04.04 구상 클래스란 용어의 어색함 (5)

객체 지향 관련 서적을 읽다보면 원서의 'concrete class'를 '구상 클래스'로 번역한 것을 보게 된다. 구상? 뭔가  잘 와닿지 않는다. 왜 이 용어가 어색한걸까? 이 어색함을 풀어보려고 글을 써 본다.


먼저, 이 어색함을 풀어보려면 'concrete class'의 의미를 먼저 알아야 할 것 같다. 'concrete class'는 'abstract class'가 아닌 'class'이인데, 여기서 'abstract class'는 'abstract operation'을 포함하고 있는 클래스를 뜻한다. 'abstract operation'은 시그너쳐만 제공하고 실제 구현(implementation)은 제공하지 않는 'operation'이다. 즉, 'abstract class'는 구현은 제공하지 않는 'operation'을 정의하고 있는 'class'인 것이다. 'concrete class'는 'abstract class'가 아닌 'class'이므로, 'concrete class'란 모든 'operation'이 구현을 제공하는 'class'라고 정의할 수 있을 것 같다.


다시 '구상 클래스'로 돌아가자. '구상'이라는 단어는 실제적이고 구체적이라는 뜻을 같는다. 미술의 경우 '추상 미술'과 '구상 미술'이라는 단어로 초현실적인 것과 현실을 그대로 반영하는 표현기법을 구분해서 표현하기도 한다. 앗, '추상 미술(abstract art)'/'구상 미술(concrete art)', '추상 클래스(abstract class)'/'구상 클래스(concrete class)'? 그러고 보니 '추상'과 '구상'은 쌍을 이루는 단어이다. 영어의 abstract와 concrete가 '추상적인'과 '구체적인(비슷한 의미로는 구상적인)'으로 번역이 되기 때문에, 'abstract class'와 'concrete class'를 각각 '추상 클래스'와 '구상 클래스'로 번역하는 것은 무리가 없어 보인다.


우리가 흔히 사용하는 '추상'과 '구상'이란 단어와 실제 'abstract class'와 'concrete class'의 의미를 함께 생각해보자.

  • 구현을 제공하지 않는 오퍼레이션(메서드)를 갖는 클래스 <--> 추상? 클래스
  • 모든 오퍼레이션이 구현을 제공하는 클래스 <--> 구상? 클래스

소프트웨어에서 '추상화'라는 것은 데이터나 프로세스 등을 의미가 비슷한 개념이나 표현으로 정의하는 것이므로, 추상화를 하면 실제 상세한 구현을 감추고 (더 상위 수준에서 개념적으로) 사고할 수 있는 결과를 얻게 된다. 이런 의미에서 오퍼레이션의 시그너쳐만 정의하고 실제 구현은 제공하지 않는 클래스는 결과적으로 인터페이스와 같은 역할을 하게 되므로 '추상 클래스'라고 표현해도 무난한 듯 하다.


그런데, 'concrete class'는 모든 오퍼레이션이 구현을 제공하는 클래스이다. 즉, 이는 각 오퍼레이션의 실체가 존재한다는 것을 뜻하는 것이다. 구상이라는 것은 추상과 대비되는 말이기 때문에, 뭔가 추상 클래스를 상속한 클래스를 지칭하는 용도로 '구상 클래스'라는 단어를 사용하는 것이 나쁜 선택은 아닌 것 같긴 하지만, 특별히 어떤 추상 타입을 상속받지 않은 클래스를 '구상 클래스'라고 부르기엔 다소 어색함이 있다. 필자의 경우 'concrete class'를 표현할 때 '구현 클래스'라는 단어를 주로 사용해 왔는데, 이 단어 역시 주로 인터페이스를 구현한다는 의미에서 '구현'이라는 단어를 선택한 것이기에 어떤 인터페이스도 상속받지 않은 클래스를 표현하기에는 다소 무리가 있다.


'concrete class'는 실제로 메모리 상에 인스턴스 생성이 가능한 클래스이기 때문에 '실체화 가능 클래스'라고 길게 표현할 수도 있을 것 같긴 한데, 너무 길다. '실체 클래스'는 어떨까? (숨어 있는 범죄 집단 느낌이 나네....) 딱히 뭐라고 표현해야 할지 떠오르지 않는다. 누군가가 언어 감각이 뛰어난 고수분이 'concrete class'를 좀 더 와닿는 용어로 번역해주었으면 하고 바래보면서 글을 마친다.

Posted by 최범균 madvirus

댓글을 달아 주세요

  1. 이대영 2013.04.09 14:09 신고  댓글주소  수정/삭제  댓글쓰기

    저는 코드리뷰나 뭐 대화할대 구현클래스라고 했었던것 같은데.. 또 생각하려니 가물가물 하네용..^^;

  2. 야식 2014.02.26 14:28 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    저도 구상클래스라는 말을 보고 검색하다가 따라 들어왔습니다.

    어느 글에서는 '구체' 클래스 라는 용어를 쓰던데요.
    너무 직역한 느낌이 드나요?
    그래도 구체 라는 인스턴스화가 되었다는 뜻도 포함하긴 하는데, 포스팅에서 지적했던 추상을 구현해 내는 느낌은 살짝 부족해 보이긴 합니다.

    아무튼 좋은 생각거리를 해볼 수 있는 기회 주셔서 감사합니다.

  3. 마크 2015.05.02 22:09 신고  댓글주소  수정/삭제  댓글쓰기

    구글에서 구상클래스를 검색해서 들어왔습니다.
    덕분에 개념 이해하고 감니다.
    감사합니다 ^^

  4. 도움받은자 2017.01.15 15:07 신고  댓글주소  수정/삭제  댓글쓰기

    구상 클래스 개념에 대해서 혼동이 있어서 이렇게 찾아와 글을 읽어보니 도움이 되었습니다. 감사합니다.