6 세 어린이에게 객체 지향 프로그래밍 개념을 설명하는 방법

면접에서 항상 똑같은 진부한 질문이 어떻게 반복되는지 알아 차리셨습니까?

무슨 말인지 아실 거라고 확신합니다.

예를 들면 :

5 년 후 당신은 어디에 있습니까?

또는 더 나쁜 경우 :

당신의 가장 큰 약점은 무엇이라고 생각하십니까?

으… 나에게 휴식을 줘. 이 질문에 대한 답은 큰 약점이라고 생각합니다! 어쨌든, 내 요지는 아닙니다.

이와 같은 질문은 사소하지만, 당신에 대한 단서를 제공하기 때문에 중요합니다. 현재의 마음 상태, 태도, 관점.

대답 할 때는 나중에 후회할 점이 드러날 수 있으므로주의해야합니다.

오늘 저는 프로그래밍 세계에서 비슷한 유형의 질문에 대해 이야기하고 싶습니다.

객체 지향 프로그래밍의 주요 원칙은 무엇입니까?

나는이 질문의 양쪽에 있었다. 너무 자주 묻는 주제 중 하나이며 자신이 모르는 것을 허용 할 수 없습니다.

주니어 및 초급 개발자는 일반적으로 대답해야합니다. 면접관이 다음 세 가지를 쉽게 말할 수 있기 때문입니다.

  1. 후보자가이 인터뷰를 준비 했습니까?

    즉시 답변을 듣게되면 보너스 포인트를 얻을 수 있습니다. 이는 진지한 접근 방식을 보여줍니다.

  2. 후보자가 튜토리얼 단계를 통과 했습니까?

    OOP (Object-Oriented Programming)의 원리를 이해하면 자습서에서 복사 및 붙여 넣기를 넘어 섰음을 알 수 있습니다. 이미 더 높은 관점에서 볼 수 있습니다.

  3. 후보자의 이해가 깊거나 얕습니까?

    이 질문에 대한 능력 수준은 종종 대부분의 다른 과목 에 대한 능력 수준과 같습니다 . 날 믿어.

객체 지향 프로그래밍의 네 가지 원칙은 캡슐화 , 추상화 , 상속 ,다형성 .

이 말은 주니어 개발자에게는 무섭게 들릴 수 있습니다. 그리고 Wikipedia의 복잡하고 지나치게 긴 설명은 때때로 혼란을 두 배로 늘립니다.

그래서 저는 이러한 각 개념에 대해 간단하고 짧고 명확하게 설명하고 싶습니다. 아이에게 설명하는 것처럼 들릴지 모르지만 실제로 인터뷰를 할 때이 대답을 듣고 싶습니다.

캡슐화

프로그램이 있다고합시다. 프로그램에 정의 된 규칙에 따라 서로 통신하는 몇 가지 논리적으로 다른 개체가 있습니다.

캡슐화는 각 객체 가 클래스 내에서 상태를 private으로 유지할 때 달성됩니다 . 다른 개체는이 상태에 직접 액세스 할 수 없습니다. 대신 메서드라고하는 공용 함수 목록 만 호출 할 수 있습니다.

따라서 객체는 메서드를 통해 자체 상태를 관리합니다. 명시 적으로 허용되지 않는 한 다른 클래스는이를 건드릴 수 없습니다. 객체와 통신하려면 제공된 방법을 사용해야합니다. 그러나 (기본적으로) 상태를 변경할 수 없습니다.

우리가 작은 심즈 게임을 만들고 있다고 가정 해 봅시다. 사람이 있고 고양이가 있습니다. 그들은 서로 의사 소통합니다. 캡슐화를 적용하고 싶기 때문에 모든 "cat"로직을Cat수업. 다음과 같이 보일 수 있습니다.

여기에 고양이의 "상태"는 것입니다 private 변수mood , hungryenergy. 또한 private 메서드가 meow()있습니다. 원할 때마다 부를 수 있고, 다른 클래스는 고양이에게 언제 야옹을 할 수 있는지 말할 수 없습니다.

그들이 할 수있는 것은에 정의되어 공공 방법sleep() , play()feed(). 그들 각각은 어떻게 든 내부 상태를 수정하고 meow(). 따라서 개인 상태와 공용 메서드 간의 바인딩이 이루어집니다.

이것은 캡슐화입니다.

추출

추상화는 캡슐화의 자연스러운 확장으로 생각할 수 있습니다.

객체 지향 디자인에서 프로그램은 종종 매우 큽니다. 그리고 별도의 개체가 서로 많이 통신합니다. 따라서 이와 같은 대규모 코드베이스를 몇 년 동안 유지하는 것은 어려운 일입니다.

추상화는이 문제를 완화하기위한 개념입니다.

추상화를 적용한다는 것은 각 객체가 이를 사용하기위한 높은 수준의 메커니즘 노출 해야 함을 의미 합니다.

이 메커니즘은 내부 구현 세부 정보를 숨겨야합니다. 다른 개체와 관련된 작업 만 표시해야합니다.

커피 머신을 생각해보십시오. 그것은 많은 일을하고 후드 아래에서 기발한 소음을냅니다. 하지만 커피를 넣고 버튼을 누르기 만하면됩니다.

이 메커니즘은 사용하기 쉽고 시간이 지남에 따라 거의 변경되지 않는 것이 좋습니다. 다른 클래스가 작동 방식을 "알지"않고 호출 할 수있는 작은 공용 메서드 집합으로 생각하십시오.

추상화의 또 다른 실제 사례?

휴대 전화를 어떻게 사용하는지 생각해보세요.

버튼 몇 개만 사용하여 휴대폰과 상호 작용합니다. 후드 아래에서 무슨 일이 일어나고 있습니까? 알 필요가 없습니다. 구현 세부 정보가 숨겨져 있습니다. 간단한 작업 집합 만 알면됩니다.

소프트웨어 업데이트와 같은 구현 변경 사항은 사용하는 추상화에 거의 영향을주지 않습니다.

계승

좋습니다. 캡슐화와 추상화가 어떻게 큰 코드베이스를 개발하고 유지하는 데 도움이되는지 보았습니다.

그러나 OOP 설계에서 또 다른 일반적인 문제가 무엇인지 알고 있습니까?

개체는 종종 매우 유사합니다. 그들은 공통 논리를 공유합니다. 그러나 그들은 완전히 동일 하지 않습니다 . 어 ...

그렇다면 공통 논리를 어떻게 재사용하고 고유 한 논리를 별도의 클래스로 추출합니까? 이를 달성하는 한 가지 방법은 상속입니다.

이는 다른 (부모) 클래스에서 파생되어 (하위) 클래스를 만드는 것을 의미합니다. 이런 식으로 우리는 계층을 형성합니다.

자식 클래스는 부모 클래스 (공통 부분)의 모든 필드와 메서드를 재사용하고 자체 (고유 부분)을 구현할 수 있습니다.

예를 들면 :

우리 프로그램이 공립 및 사립 교사뿐만 아니라 학생과 같은 다른 유형의 사람들도 관리해야하는 경우이 클래스 계층을 구현할 수 있습니다.

이런 식으로 각 클래스는 부모 클래스와 공통 논리를 재사용하면서 필요한 것만 추가합니다.

다형성

우리는 가장 복잡한 단어에 속합니다! 다형성은 그리스어로 "많은 모양"을 의미합니다.

그래서 우리는 이미 상속의 힘을 알고 즐겁게 사용합니다. 그러나이 문제가 있습니다.

부모 클래스와 그로부터 상속되는 몇 개의 자식 클래스가 있다고 가정 해 보겠습니다. 때때로 우리는 이러한 모든 클래스의 혼합을 포함하는 컬렉션 (예 : 목록)을 사용하려고합니다. 또는 부모 클래스에 대해 구현 된 메서드가 있지만 자식에도 사용하고 싶습니다.

이것은 다형성을 사용하여 해결할 수 있습니다.

간단히 말해, 다형성은 부모와 똑같은 클래스를 사용하는 방법을 제공하므로 혼합 유형과 혼동하지 않습니다.그러나 각 자식 클래스는 자체 메서드를 그대로 유지합니다.

이것은 일반적으로 재사용 할 (상위) 인터페이스를 정의함으로써 발생합니다. 일반적인 방법을 설명합니다. 그런 다음 각 자식 클래스는 이러한 메서드의 자체 버전을 구현합니다.

컬렉션 (예 : 목록) 또는 메서드가 부모의 인스턴스 (일반 메서드가 설명 된 경우)를 기대할 때마다 언어는 어떤 자식이 전달되는지에 관계없이 공용 메서드의 올바른 구현을 평가합니다.

기하학적 도형 구현 스케치를 살펴보세요. 그들은 표면적과 둘레를 계산하기 위해 공통 인터페이스를 재사용합니다.

부모를 상속이 세 가지 수치를 갖는 것은 Figure Interface당신이 혼합 된 목록을 만들 수 있습니다 triangles, circles하고 rectangles. 그리고 그것들을 같은 유형의 물건처럼 취급하십시오.

그런 다음이 목록이 요소의 표면을 계산하려고하면 올바른 방법을 찾아 실행합니다. 요소가 삼각형이면 삼각형의CalculateSurface()호출됩니다. 원이면 cirlce의CalculateSurface()호출됩니다. 등등.

매개 변수를 사용하여 도형으로 작동하는 함수가있는 경우 삼각형, 원 및 직사각형에 대해 한 번씩 세 번 정의 할 필요가 없습니다.

한 번 정의하고 수락 할 수 있습니다. Figure인수로. 삼각형, 원 또는 직사각형을 전달하는지 여부에 관계없이를 구현 CalculateParamter()하는 한 유형은 중요하지 않습니다.

도움이 되었기를 바랍니다. 면접에서 이와 똑같은 설명을 직접 사용할 수 있습니다.

여전히 이해하기 어려운 부분을 발견하면 주저하지 말고 아래 의견에 질문하십시오.

무엇 향후 계획?

모든 면접 질문 고전 중 하나에 답할 준비를하는 것은 훌륭하지만 때로는 면접을 요청하지 않습니다.

다음으로 고용주가 주니어 개발자에게보고 싶은 내용과 구직시 군중에서 눈에 띄는 방법에 초점을 맞출 것입니다.

계속 지켜봐주세요.