추상화의 중요성

추상화가 중요하다는 것을 주입식으로 머리에 넣어왔는데, 최근에 좀 더 명확히 이해하게 된 것 같습니다. 추상화가 중요하다는 것 이전에, 추상화 개념을 다시 한번 정립해 보기 위해 카페에서 고양이를 만났다는 상황을 생각해 보았어요.


일행 중 한 사람이, “저 고양이 너무 귀엽다!!”라고 말합니다. 이때 단순히 무늬로 구분하여 보고 있는 고양이를 표현했을 뿐이지, “치즈무늬에 흰 장갑을 끼고, 뱃살이 조금 통통하고, 3살쯤으로 추정되며, 코리안 숏헤어인 저 고양이 너무 귀엽다!!”라고 모든 정보를 풀어서 말하지 않아요.


이처럼 우리가 보고 표현하는 정보는, 그들이 갖고 있는 모든 정보에 비해서 아주 단편적인 정보일 뿐이에요. 하지만 그럼에도 우리는 서로 같은 것을 생각하고 대화하는 데 아무 문제가 없죠. 우리는 알게 모르게 ‘맥락’에 맞춰 축약된 정보만을 사용하여 생각을 공유했던 거예요. 그것이 추상화였던 것이죠.


컴퓨터와의 대화긴 하지만, 프로그래밍 언어로 개발하는 것도 결국 사람의 생각을 담아 만들고 사용하는 도구란 것을 다시금 깨달았습니다. 때문에 우리는 실세계에서의 사고방식 즉, 추상화를 통해 코드를 작성해야 하는 것이었어요.


동물의 울음소리를 실행시키는 기능을 개발해야 하는 상황이 있습니다. Animal이라는 추상 클래스는 makeSound()라는 메서드를 갖고 있어요. 그리고 Animal을 상속받은 DogCat 클래스가 있습니다. bark()meow() 메소드를 makeSound() 안에 오버라이드 하고 있죠. 우리는 현재 ‘동물의 울음소리를 실행시키자’라는 맥락을 가지고 있습니다.


그런데, 우리는 어떤 동물인지를 반드시 선택해야 해요. Animal로는 어떤 울음소리를 내는지 알 수 없죠. ‘동물 중 어떤 동물의 울음소리를 내게 해야 하지?’, ‘만약 고양이라면 어떤 소리를 내게 해야 하지?’라고 구현의 흐름을 좆아가야만 합니다. 복잡하죠.


하지만 만약 어떤 동물 중 하나를 반환하는 getAnimal()를 구현하여 인스턴스를 만들었다면 단순히 인스턴스.makeSound()로 동물의 울음소리를 실행시킬 수 있겠죠. 어떤 특정한 동물과 그 동물의 울음소리를 찾을 필요 없이.


이처럼 추상화를 잘 이루었다면, 우리는 객체의 세부 사항과 구현에 구애받지 않고 원하는 기능을 맥락에 맞춰 유연하게 사용할 수 있어요. 실세계에서 고양이의 모든 정확한 정보를 알지 않아도 특정 고양이를 지칭할 수 있듯이 말이죠. 추상화를 잘해야 하는 이유를 이제 나름대로 머릿속에 정립한 것 같아요.

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 3월 18일 오후 3:06

댓글 0

    함께 읽은 게시물

    쉬운 길

    

    ... 더 보기

    프리미어리그를 비롯한 유럽 축구리그에는 한국에서 뛰는 모든 축구 선수들의 연봉을 합한 것보다 수십 배가 넘는 돈을 버는 선수들이 즐비하다. 이런 일이 왜 가능할까?

    ... 더 보기

    [허연의 책과 지성] 1:99 양극화 사회선 결국 1%도 불행해진다 - 매일경제

    매일경제

    [허연의 책과 지성] 1:99 양극화 사회선 결국 1%도 불행해진다 - 매일경제

    《편의성보다 우선해야 할 인간적 접촉》

    ... 더 보기


    💪 모든 경험은 의미가 있다

    커리어는 정해진 목표를 향해 뛰는 경주가 아니다. 길을 알려주는 정답 지도가 있는 것도 아니고 찾아야 하는 보물이 있는 것도 아니다. 직업은 생활에 필요한 재원을 만드는 일이고, 커리어는 나에게 맞는 길을 찾아가는 과정이고, 그 인생 과정에서 성장을 하게 된다. 나에게 맞는 커리어를 찾는 과정에는 자연스럽게 시행착오가 따른다. 다른 사람에게 조언을 듣거나 남들이 어떻게 하는지 보고 배울 수도 있지만, 가장 좋은 방법은 스스로 경험해 보고 터득하는 것이다. 그리고 이때 중요한 것은 경험의 겉모습이 아닌 본질을 파악하는 것이다. ​각 경험의 본질에 대해서 생각해 볼 수 있는 몇 가지 항목들이다. ​1. 대기업 vs. 스타트업 대기업의 가장 큰 장점은 갖춰진 시스템과 그로 인한 안정감이 아닐까 싶다. 갖춰진 시스템 속에서 세분화된 자신의 전문분야 일을 하게 된다. 시스템 안에서는 전문가로 인정받지만 시스템을 벗어나면 홀로서기가 어려운 단점이 있다. 마켓 사이즈나 임팩트가 큰 프로젝트에 기여하는 장점이 있는 반면, 자신이 그저 ‘직원 1’인 것처럼 느끼기 쉽다. 리스크 관리 시스템이 안정적이라는 장점도 있지만, 이건 누구든 언제라도 교... 더 보기

     • 

    댓글 5 • 저장 205 • 조회 6,353