일반화 vs 추상화

김포프 2022-07-19

세줄요약

  1. 엄밀히 말하면 개체지향(OOP)에서 일반화추상화는 다른 것 (참고: 스택오버플로).
  2. 하지만 둘 다 복잡도(complexity)를 줄이는 방법.
  3. 실제 업계에서도 일반화추상화는 같은 의미로 사용하니 대충 문맥상 알아들을 것.

흔히 혼용하는 용어 굳이 구분해야 하나?

업계에서는 흔히 혼용하는 용어들이 있는데 선생질을 하다 보니(밴쿠버 예술대학 > BCIT > POCU 아카데미까지) '구분해서 가르쳐야 하나?' 고민하게 되는 용어들이 있다.

물론 프로그래밍 교육기관인 POCU 아카데미사 프로그래머들은 이런 용어들을 다 구분해서 사용하지만(아, 불쌍한 직원들.. 미안해요) 99.9% 프로그래머들은 그 미묘한 차이를 몰라도 아무 상관없는 경우가 많다. 혼용해 사용해도 문맥 상 의미가 분명한 경우가 많기 때문…

오늘은 일반화(generalization) vs 추상화(abstraction) 이야기. POCU 아카데미에서 개체지향 과목을 가르치다 보니 어쩔 수 없이 생각했던 용어들이다.

일반화

굳이 정의를 찾아보면 일반화란 비슷한 여러 기능들을 한 곳으로 합쳐서 처리하는 것이다. 그로 인해 코드 또는 설계 상의 복잡도가 줄어들지. (코드 중복이 나쁜 이유를 모른다면 당신은 주니어 프로그래머)

추상화

역시 굳이 정의를 찾아보면 추상화란 외부인(보통 함수 호출자, 혹은 다른 클래스)에게 필요 없는 디테일들을 숨기는 것. 그로 인해 역시 코드 혹은 설계상의 복잡도가 줄어든다.

OOP에서 둘의 차이?

OOP에서 일반화를 하다 보면 부모 클래스를 만드는 게 흔한 일이다. 부모 클래스도 클래스니 캡슐화가 들어가게 되면서 자식 혹은 외부 클래스들이 볼 필요 없는 디테일들을 숨기게 된다. 따라서 추상화도 동시에 일어남

그래서인지 업계에서는 그냥 두 용어를 혼용해서 사용하고, 이 두 용어 혼용한다고 해서 딴지 거는 사람들을 본 적이 없다. 나와 같이 일했던 프로그래머 수가 수백 명이니.. 이 정도면 괜찮은 표본 아닐까? 다행히도 업계에는 맞춤법 빌런이 별로 없어요…

결론: 굳이 둘 구분해서 사용할 필요 없음

굳이 구분해서 사용하지 마세요. 그 보다 더 중요한 게 많아요.

img

TOP 개발자에게 배우는 컴공수업 | 수업료는 최저시급, 난 최고연봉 | 프로그래밍 공부순서

야근 없이 오직 실력으로 대우받는 프로그래머가 되고 싶다고요? POCU 아카데미에서 시작하세요!