From 853e3c75abc7a3aeca071e36de506c6b9b2920a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9A=A9=EC=A7=84?= <90879448+Leesin0222@users.noreply.github.com> Date: Sun, 5 Jan 2025 20:50:40 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Create=20=EC=8A=A4=ED=94=84=EB=A7=81=20?= =?UTF-8?q?=EC=9E=85=EB=AC=B8=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=9E=90?= =?UTF-8?q?=EB=B0=94=20=EA=B0=9D=EC=B2=B4=20=EC=A7=80=ED=96=A5=EC=9D=98=20?= =?UTF-8?q?=EC=9B=90=EB=A6=AC=EC=99=80=20=EC=9D=B4=ED=95=B4=203=EC=9E=A5?= =?UTF-8?q?=20=EB=82=B4=EC=9A=A9=20=EC=A4=91.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... \353\202\264\354\232\251 \354\244\221.md" | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 "week2/yongjin/\354\212\244\355\224\204\353\247\201 \354\236\205\353\254\270\354\235\204 \354\234\204\355\225\234 \354\236\220\353\260\224 \352\260\235\354\262\264 \354\247\200\355\226\245\354\235\230 \354\233\220\353\246\254\354\231\200 \354\235\264\355\225\264 3\354\236\245 \353\202\264\354\232\251 \354\244\221.md" diff --git "a/week2/yongjin/\354\212\244\355\224\204\353\247\201 \354\236\205\353\254\270\354\235\204 \354\234\204\355\225\234 \354\236\220\353\260\224 \352\260\235\354\262\264 \354\247\200\355\226\245\354\235\230 \354\233\220\353\246\254\354\231\200 \354\235\264\355\225\264 3\354\236\245 \353\202\264\354\232\251 \354\244\221.md" "b/week2/yongjin/\354\212\244\355\224\204\353\247\201 \354\236\205\353\254\270\354\235\204 \354\234\204\355\225\234 \354\236\220\353\260\224 \352\260\235\354\262\264 \354\247\200\355\226\245\354\235\230 \354\233\220\353\246\254\354\231\200 \354\235\264\355\225\264 3\354\236\245 \353\202\264\354\232\251 \354\244\221.md" new file mode 100644 index 0000000..583d0ca --- /dev/null +++ "b/week2/yongjin/\354\212\244\355\224\204\353\247\201 \354\236\205\353\254\270\354\235\204 \354\234\204\355\225\234 \354\236\220\353\260\224 \352\260\235\354\262\264 \354\247\200\355\226\245\354\235\230 \354\233\220\353\246\254\354\231\200 \354\235\264\355\225\264 3\354\236\245 \353\202\264\354\232\251 \354\244\221.md" @@ -0,0 +1,68 @@ +### 객체 지향은 인간 지향이다. + +지금까지 어셈블리어 → C → C++ → Java, Python처럼 저수준에서 고수준 언어로 발전해 왔다. 이러한 발전은 인간이 프로그래밍을 더 쉽게 이해하고 사용할 수 있도록 언어가 변화해온 과정이다. + +그러나 절차지향 프로그래밍과 구조적 프로그래밍은 언어처럼 눈에 띄게 발전하지 않았고, 포인터와 같은 기계 수준의 개념을 이해하지 않으면 다루기 어려운 기법들이 많았다. + +여기서 "왜 우리가 기계에 종속적인 방식으로 개발해야 하는가?"라는 의문이 제기되었고, 이러한 문제를 해결하기 위한 새로운 접근법으로 객체지향 프로그래밍이 등장했다. 객체지향 프로그래밍은 우리에게 친숙한 객체, 즉 사물을 중심으로 현실 세계의 개념을 반영하여 설계되었다. + +기존의 구조적 프로그래밍에서 가장 중요한 요소는 함수였다. 구조적/절차적 프로그래밍 언어에서 함수는 코드를 논리적인 단위로 구분하고 분할하여 정복하는 것에 목적이 있었다. 즉, Divide and Conquer(D&C) 방식으로 문제를 해결하는 데 초점이 맞춰져 있었다. 물론 중복 제거의 목적도 있었다. + +함수를 도입함으로써 프로그래밍이 더 편리해졌을 때, 현실 세계의 객체를 인지하는 방식으로 프로그램을 설계하자는 아이디어가 나왔고, 그 결과 객체지향 프로그래밍이 탄생했다. 컴퓨터의 0과 1로 이루어진 사고방식 대신 현실 세계의 객체와 유사한 방식으로 프로그래밍할 수 있다는 점에서 객체지향 프로그래밍은 더 직관적이다. + +요약하자면, 절차지향이 가진 기계 수준의 복잡성을 극복하고자 만들어진 것이 객체지향 프로그래밍이며, 현실 세계의 객체를 반영한 설계 방식 덕분에 더 직관적인 접근법이라 할 수 있다. + +--- + +### 객체 지향을 이해하려면 다음과 같은 특징들을 이해해야 한다. + +- 세상에 존재하는 모든 것은 객체이다. +- 각각의 객체는 고유하다. +- 객체는 속성을 갖는다. (property) +- 객체는 행위를 할 수 있다. (method) + +객체 지향은 인간의 인지와 사고방식을 프로그래밍에 접목시켜 더 직관적이다. + +### 객체지향의 4대 특성 + +객체지향 프로그래밍의 핵심 개념은 4대 특성으로 요약할 수 있다. 이를 쉽게 외우기 위해 "캡! 상추다"라는 표현이 사용되기도 한다. + +- **캡**: 캡슐화 +- **상**: 상속 +- **추**: 추상화 +- **다**: 다형성 + +### 클래스 : 객체 ≠ 붕어빵틀 : 붕어빵 + +많은 책이나 강의에서 클래스와 객체의 관계를 붕어빵틀과 붕어빵에 비유하곤 한다. 그러나 이 비유는 잘못된 설명이다. 코드를 살펴보면 금방 이해할 수 있다. + +```Java +// (클래스) 객체명 = new 클래스(); +붕어빵틀 붕어빵 = new 붕어빵틀(); +``` + +코드만 봐도 붕어빵틀이 곧 붕어빵이 될 수 없다는 것을 알 수 있다. 붕어빵틀을 가지고 어떻게 붕어빵이 될 수 있겠는가? + +아직도 이해가 안 된다면 다음 문장을 생각해보자. + +*붕어빵틀을 하나 만들었는데 붕어빵이 되었다.* + +이제 이해가 되었는가? 붕어빵틀과 붕어빵의 비유는 클래스와 객체의 관계를 설명하는 데 적절하지 않다. + +조금 더 정확하게 표현하자면, 객체는 클래스의 인스턴스라고 부른다. 붕어빵틀과 붕어빵의 관계는 클래스를 틀에 비유하여 설명하는 데 초점을 맞춘 설명일 뿐이다. 하지만 엄밀히 말하면 클래스와 객체의 관계를 설명하는 데 적합하지 않다. + +클래스와 객체의 관계를 더 적절하게 설명하자면 "사람 : 이용진"과 같은 관계가 적합하다. 사람이라는 개념은 실체가 아니지만, "이용진"이라는 특정 사람은 실체이다. 즉, **클래스는 분류에 대한 개념이지 실체가 아니며, 객체가 실체이다.** + +--- + +### 추상화 + +**추상화**란 무엇인가? 추상화는 즉, **모델링**이다. + +추상화라는 개념을 이해하려면 먼저 애플리케이션의 경계(context)에 대해 알아야 한다. 예를 들어 사람이라는 클래스를 설계한다고 할 때, 사람의 속성과 행동은 무수히 많을 수 있다. (예: 먹기, 자기, 보기, 요리하기 등) + +하지만 병원 애플리케이션을 개발한다고 가정하면, 사람 클래스에는 병원과 관련된 속성과 행동만 포함해야 한다. 예를 들어 환자, 의사, 병원장과 같은 역할에 필요한 속성과 행동만 정의하는 것이다. + +이처럼 특정 애플리케이션 경계에 맞게 관심 영역의 특성을 조합하여 모델링하는 과정을 **추상화**라고 한다. Java에서는 `class` 키워드를 통해 객체지향의 추상화를 지원한다. + +추상화는 주관적이다. 설계자가 누구냐에 따라 모델링 방식은 달라질 수 있다. From 3338650b10f85108061fd83d2eaead1396877101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9A=A9=EC=A7=84?= <90879448+Leesin0222@users.noreply.github.com> Date: Sun, 5 Jan 2025 20:56:13 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Rename=20=EC=8A=A4=ED=94=84=EB=A7=81=20?= =?UTF-8?q?=EC=9E=85=EB=AC=B8=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=9E=90?= =?UTF-8?q?=EB=B0=94=20=EA=B0=9D=EC=B2=B4=20=EC=A7=80=ED=96=A5=EC=9D=98=20?= =?UTF-8?q?=EC=9B=90=EB=A6=AC=EC=99=80=20=EC=9D=B4=ED=95=B4=203=EC=9E=A5?= =?UTF-8?q?=20=EB=82=B4=EC=9A=A9=20=EC=A4=91.md=20to=20yongjin.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yongjin/yongjin.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "week2/yongjin/\354\212\244\355\224\204\353\247\201 \354\236\205\353\254\270\354\235\204 \354\234\204\355\225\234 \354\236\220\353\260\224 \352\260\235\354\262\264 \354\247\200\355\226\245\354\235\230 \354\233\220\353\246\254\354\231\200 \354\235\264\355\225\264 3\354\236\245 \353\202\264\354\232\251 \354\244\221.md" => week2/yongjin/yongjin.md (100%) diff --git "a/week2/yongjin/\354\212\244\355\224\204\353\247\201 \354\236\205\353\254\270\354\235\204 \354\234\204\355\225\234 \354\236\220\353\260\224 \352\260\235\354\262\264 \354\247\200\355\226\245\354\235\230 \354\233\220\353\246\254\354\231\200 \354\235\264\355\225\264 3\354\236\245 \353\202\264\354\232\251 \354\244\221.md" b/week2/yongjin/yongjin.md similarity index 100% rename from "week2/yongjin/\354\212\244\355\224\204\353\247\201 \354\236\205\353\254\270\354\235\204 \354\234\204\355\225\234 \354\236\220\353\260\224 \352\260\235\354\262\264 \354\247\200\355\226\245\354\235\230 \354\233\220\353\246\254\354\231\200 \354\235\264\355\225\264 3\354\236\245 \353\202\264\354\232\251 \354\244\221.md" rename to week2/yongjin/yongjin.md