[자바 무료 강의] 추상화는 핵심적인 것을 추려내는 것이다 - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의추상화는 핵심적인 것을 추려내는 것이다최종수정일 2021-11-21
아이콘약 4분

핵심적인 것을 추려내는 것을 추상화라고 합니다. 앞으로 추상화라는 단어는 굉장히 많이 들어볼 텐데요. 추상화를 잘하느냐 못하느냐에 따라 나중에 수명주기가 긴 코드를 짜느냐 못짜느냐로 갈립니다. 큰 프로젝트를 할수록 추상화는 굉장히 중요한 요소가 됩니다.

추가 노트

추상화


내용에 중점을 두는 것보다 핵심적인 개념을 추려내는 것을 추상화라고 합니다. 프로그램을 설계하거나 코딩을 할 때도 핵심적인 것을 추려내는 것은 중요합니다. 그리고 추상화를 하는 과정에서는 공통적인 것을 추려내는 것도 포함됩니다.

추상화를 간단히 요약하면 다음과 같습니다.

  1. 추상화는 핵심적인 것을 추려내는 것이다.

  2. 추상화를 하는 방법은 핵심적인 것만 추려서 노출시킨다.

  3. How보다 What에 포커스를 둔다.

말로만 하면 이해가 쉽지 않을 테니 눈으로 한 번 봅시다.

image

그림의 인간에게는 네 가지 행위가 있습니다.

  1. 식탁에 앉는다.

  2. 숟가락을 들다.

  3. 숟가락으로 밥을 푸다.

  4. 밥을 입으로 가져간다.

네 가지 행위가 존재하는 이유는 단 하나의 핵심 행위 때문에 존재합니다. 바로 밥을 먹기 먹기 위해서 존재하는 행위들이죠. 현실 세계에서 우리가 사람들과 밥을 먹을 때 밥을 먹으라고 하지 밥을 이렇게 저렇게 먹으라고 얘기해 주지는 않습니다. (어린아이는 예외로 합시다)

꼭 밥뿐만은 아닙니다. 일을 할 때도 일하는 방법을 가르치는 것은 핵심 행위를 할 수 있도록 가르치는 것입니다. 본질 목적은 문제 해결과 핵심 행위에 중점을 두고 있습니다.

image

이러한 핵심 행위는 바라보는 관점에 따라 달라질 수 있습니다. 예시로 식탁에 앉는 것을 핵심 행위라고 본다면 어떤 식탁에 앉는지는 중요하지 않습니다. 식탁에 앉기만 하면 됩니다. 그리고 부수적인 행위는 어떤 식탁인지 설명하는 것이 되겠지요.

행위를 쪼개고 쪼개다 보면 결국에는 핵심 행위들의 집합이 됩니다. 이러한 핵심 행위들을 잘 판단하는 것이 가장 먼저 해야 할 일입니다.

image

실습도구에 있는 Person 클래스는 다형성, 추상화, 캡슐화의 개념이 동시에 존재합니다. 다형성을 다시 복기하면 여러 가지 형태에 속할 수 있는 성질이며 Rice, Spoon, Table을 기반으로 다양한 여러 클래스들로 확장되었습니다. 그리고 다형성의 성질을 이용하여 부수적인 행위는 각 관련된 세부적인 클래스의 행위로 넘기고 핵심 행위만 노출되어 있습니다.

핵심 행위가 목적이라면 굳이 부수적인 행위를 노출할 필요가 없지요.

Person 클래스의 eat() 메서드는 앉고, 들고, 푸고, 먹는다 이 세 가지에만 집중합니다. 그리고 Person 클래스의 eat() 메서드를 호출하는 명령자도 핵심 행위만 호출하면 됩니다. 어떻게 밥을 먹는지에 대한 행위는 숨겨집니다.

다시 정리하면

  1. 다형성 - Rice, Spoon, Table을 기반으로 다양한 여러 클래스들로 확장

  2. 추상화 - 핵심적인 개념만 추림, eat(), seat(), taken(), scoop(), eaten()

  3. 캡슐화 - 핵심 행위가 아닌 것을 숨김

현업에서는 이것을 하나하나 구분하면서 코딩하거나 설계하지는 않고 당연하게 습관적으로 생각합니다.

“내가 구현하려는 핵심 행위는 무엇인가?”

“내가 무엇을 하려고 하는 것인가?”

도전자 질문
아이콘bwtree(2022-10-20 14:27 작성됨)
Person 객체가 메서드 값을 받아와서 실행될 때 작성코드의 순서는 중요하지 않나요? 
보면 eat() 메서드에서 spoon.scoop(rice); 다음에 rice.eaten(); 이 오잖아요.
순차적으로 실행된다면 rice.eaten()이 후에 실행되기 때문에 name 값을 리턴받을 수 없어 spoon.scoop()이 그냥 rice 값을 가질것 같은데 안 그렇네요...
예를들어, person1 객체를 생성할 때 이미 리턴값까지 받아놓아진 상태인건가요? 뭔가 은근 질문하면서 정리가 된거 같기도 하네요
아이콘bng4535(2022-01-01 18:17 작성됨)
어느 부분이 많이 쓰이고 실전에서 어떻게 왜 중요한지 알려주시는 게 막연하게 듣고 따라하는 거보다 훨씬 큰 도움이 되는 것 같습니다. 감사합니다 ~
아이콘코드라떼(2022-01-01 19:14 작성됨)
안녕하세요. 코드라떼입니다 :)

bng4535 도전자님의 의견을 수렴하여 실전에서 해당 구문들이 어떻게 사용하는지 왜 중요한지를 공감 되도록 설명하기 위해 많은 고민을 해보겠습니다.

감사합니다 :)
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io
사업자등록번호 : 824-06-01921
통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호
파일
파일파일
Root
파일

이번 코드는 파일이 굉장히 많습니다. 그러나 어려운 내용은 없습니다. 천천히 코드를 살펴보세요. 추상화와 다형성이 합쳐지면 실습도구의 코드 같이 유연성을 가진 소프트웨어를 만들 수 있습니다.

Output
root$
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의추상화는 핵심적인 것을 추려내는 것이다최종수정일 2021-11-21
아이콘약 4분

핵심적인 것을 추려내는 것을 추상화라고 합니다. 앞으로 추상화라는 단어는 굉장히 많이 들어볼 텐데요. 추상화를 잘하느냐 못하느냐에 따라 나중에 수명주기가 긴 코드를 짜느냐 못짜느냐로 갈립니다. 큰 프로젝트를 할수록 추상화는 굉장히 중요한 요소가 됩니다.

추가 노트

추상화


내용에 중점을 두는 것보다 핵심적인 개념을 추려내는 것을 추상화라고 합니다. 프로그램을 설계하거나 코딩을 할 때도 핵심적인 것을 추려내는 것은 중요합니다. 그리고 추상화를 하는 과정에서는 공통적인 것을 추려내는 것도 포함됩니다.

추상화를 간단히 요약하면 다음과 같습니다.

  1. 추상화는 핵심적인 것을 추려내는 것이다.

  2. 추상화를 하는 방법은 핵심적인 것만 추려서 노출시킨다.

  3. How보다 What에 포커스를 둔다.

말로만 하면 이해가 쉽지 않을 테니 눈으로 한 번 봅시다.

image

그림의 인간에게는 네 가지 행위가 있습니다.

  1. 식탁에 앉는다.

  2. 숟가락을 들다.

  3. 숟가락으로 밥을 푸다.

  4. 밥을 입으로 가져간다.

네 가지 행위가 존재하는 이유는 단 하나의 핵심 행위 때문에 존재합니다. 바로 밥을 먹기 먹기 위해서 존재하는 행위들이죠. 현실 세계에서 우리가 사람들과 밥을 먹을 때 밥을 먹으라고 하지 밥을 이렇게 저렇게 먹으라고 얘기해 주지는 않습니다. (어린아이는 예외로 합시다)

꼭 밥뿐만은 아닙니다. 일을 할 때도 일하는 방법을 가르치는 것은 핵심 행위를 할 수 있도록 가르치는 것입니다. 본질 목적은 문제 해결과 핵심 행위에 중점을 두고 있습니다.

image

이러한 핵심 행위는 바라보는 관점에 따라 달라질 수 있습니다. 예시로 식탁에 앉는 것을 핵심 행위라고 본다면 어떤 식탁에 앉는지는 중요하지 않습니다. 식탁에 앉기만 하면 됩니다. 그리고 부수적인 행위는 어떤 식탁인지 설명하는 것이 되겠지요.

행위를 쪼개고 쪼개다 보면 결국에는 핵심 행위들의 집합이 됩니다. 이러한 핵심 행위들을 잘 판단하는 것이 가장 먼저 해야 할 일입니다.

image

실습도구에 있는 Person 클래스는 다형성, 추상화, 캡슐화의 개념이 동시에 존재합니다. 다형성을 다시 복기하면 여러 가지 형태에 속할 수 있는 성질이며 Rice, Spoon, Table을 기반으로 다양한 여러 클래스들로 확장되었습니다. 그리고 다형성의 성질을 이용하여 부수적인 행위는 각 관련된 세부적인 클래스의 행위로 넘기고 핵심 행위만 노출되어 있습니다.

핵심 행위가 목적이라면 굳이 부수적인 행위를 노출할 필요가 없지요.

Person 클래스의 eat() 메서드는 앉고, 들고, 푸고, 먹는다 이 세 가지에만 집중합니다. 그리고 Person 클래스의 eat() 메서드를 호출하는 명령자도 핵심 행위만 호출하면 됩니다. 어떻게 밥을 먹는지에 대한 행위는 숨겨집니다.

다시 정리하면

  1. 다형성 - Rice, Spoon, Table을 기반으로 다양한 여러 클래스들로 확장

  2. 추상화 - 핵심적인 개념만 추림, eat(), seat(), taken(), scoop(), eaten()

  3. 캡슐화 - 핵심 행위가 아닌 것을 숨김

현업에서는 이것을 하나하나 구분하면서 코딩하거나 설계하지는 않고 당연하게 습관적으로 생각합니다.

“내가 구현하려는 핵심 행위는 무엇인가?”

“내가 무엇을 하려고 하는 것인가?”

도전자 질문
아이콘bwtree(2022-10-20 14:27 작성됨)
Person 객체가 메서드 값을 받아와서 실행될 때 작성코드의 순서는 중요하지 않나요? 
보면 eat() 메서드에서 spoon.scoop(rice); 다음에 rice.eaten(); 이 오잖아요.
순차적으로 실행된다면 rice.eaten()이 후에 실행되기 때문에 name 값을 리턴받을 수 없어 spoon.scoop()이 그냥 rice 값을 가질것 같은데 안 그렇네요...
예를들어, person1 객체를 생성할 때 이미 리턴값까지 받아놓아진 상태인건가요? 뭔가 은근 질문하면서 정리가 된거 같기도 하네요
아이콘bng4535(2022-01-01 18:17 작성됨)
어느 부분이 많이 쓰이고 실전에서 어떻게 왜 중요한지 알려주시는 게 막연하게 듣고 따라하는 거보다 훨씬 큰 도움이 되는 것 같습니다. 감사합니다 ~
아이콘코드라떼(2022-01-01 19:14 작성됨)
안녕하세요. 코드라떼입니다 :)

bng4535 도전자님의 의견을 수렴하여 실전에서 해당 구문들이 어떻게 사용하는지 왜 중요한지를 공감 되도록 설명하기 위해 많은 고민을 해보겠습니다.

감사합니다 :)
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io|운영시간 09:00 - 18:00(평일)
사업자등록번호 : 824-06-01921|통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호(경기창조혁신센터)
파일
파일파일
Root
파일

이번 코드는 파일이 굉장히 많습니다. 그러나 어려운 내용은 없습니다. 천천히 코드를 살펴보세요. 추상화와 다형성이 합쳐지면 실습도구의 코드 같이 유연성을 가진 소프트웨어를 만들 수 있습니다.

Output
root$