hyperskill - What is object-oriented programming 영어 원문
Fundamentals - 기초
Object-oriented programming (OOP - 객체지향 프로그래밍)
은 objects (객체) 의 개념에 기반한 프로그래밍 패러다임입니다.
객체는 프로그램 기능을 수행하기 위해 서로 다른 객체들과 소통하는 것을 의미합니다.
각각의 객체는 변수와 행동에 의해 특성화될 수 있습니다.
객체는 고유의 변수와 함수에 의해 개별화될 수 있다는 얘기이다.
객체의 현재 상태는 스스로의 필드 에 의해 표현되며,
객체의 행동은 스스로의 메서드 에 의해 표현됩니다.
Basic principles of OOP - OOP의 기본적인 규칙 및 규약
OOP (Object-Oriented-Programming) 에는 네 개의 기본적인 규약이 있습니다.
이는 encapsulation (캡슐화), abstraction (추상화), inheritance (계승), polymorphism (다형성) 입니다.
Encapsulation - 캡슐화
캡슐화는 데이터가 묶여 있으며, 메서드들이 단일 유닛으로 데이터가 운용된다는 것을 보장합니다.
또한 이는 오브젝트의 속성과 메서드들의 내부적인 구조를 숨기는 능력을 말하기도 합니다.
Data abstraction - 데이터 추상화
데이터 추상화가 의미하는 바는,
객체는 간단하게 그들의 구현을 추상화한 버전으로 제공해야 한다는 겁니다.
이러한 객체의 내부적인 작업의 세부사항은 유저들에게 중요하지 않으므로,
이러한 작업의 세부사항을 표현 할 필요가 없습니다.
또한 추상화는 객체의 가장 관련 있는 기능들만이 표현된다는 것을 의미합니다.
Inheritance - 계승
계승은 클래스 간의 부모-자식 혹은 슈퍼-서브 관계를 정의하는 메카니즘입니다.
종종 객체들은 아주 비슷하므로, 계승은 프로그래머들이 평범한 로직을 재사용 할 수 있게 해 주며,
동시에 기존 클래스에 고유한 개념을 도입 할 수 있게 해 줍니다.
Polymorphism - 다형성
다형성은 문자 그대로 "많은 형태를 가지고 있다" 이며,
다형성의 개념은 계승 과 관련이 있습니다.
이는 프로그래머들이 같은 메서드에 대해 서로 다른 구현을 정의하게 해 줍니다.
따라서, 이름 (혹은 interface) 은 같을 수 있으나, 행동은 아마 다를 겁니다.
예를 들어, 웹사이트가 세 개의 주요 텍스트 타입을 포스팅한다고 상상 해 보세요 : news, announcements, articles
이 세 유형의 텍스트는 모두 헤드라인, 텍스트, 날짜를 가진다는 점에서는 약간 비슷합니다.
반면에, 이것들은 다릅니다 :
article 은 저자를 가지고,
news 에는 출처가 있으며,
announcement 는 해당 날짜가 지나면 관련성이 없게 됩니다.
모든 출판을 위해 일반적인 정보를 가지고 있는 추상적인 클래스를 작성하는 것이 편리합니다.
이는 매번 복사하는 것을 피하기 위함이며, 적절한 파생 클래스에 무엇이 다른지 저장하기 위함입니다.
위에 있는 것들이 OOP 의 핵심 개념입니다.
각각의 객체 지향 언어들은 이러한 규칙을 스스로의 방식으로 구현하지만,
본질은 모든 언어가 동일합니다.
Objects - 객체
OOP의 핵심 개념은 object (객체) 입니다.
당신을 둘러싼 실제 세상의 객체들이 많습니다. :
애완동물, 빌딩, 차, 컴퓨터, 비행기, 그 밖의 뭐든지..
심지어 컴퓨터 프로그램은 객체처럼 고려되었을 겁니다.
실 세상의 객체의 몇 가지 중요한 특성을 식별하는 것은 가능합니다.
예를 들어, 빌딩이 있는데, 몇 층인지, 건립일자, 전체면적을 고려 할 수 있습니다.
또 다른 예제는 비행기입니다.
비행기는 확실히 몇 명의 탑승자를 수용 할 수 있는지,
어느 도시에서 어느 도시로 이동하는지와 같은 특성이 있습니다.
이러한 특성들은 객체의 attributes (속성) 과 methods (메서드 - 함수) 를 구성합니다.
속성은 객체의 상태나 데이터를 특성화하고,
메서드 - 함수는 행동양식을 특성화합니다.
Classes - 클래스
종종 많은 개별적인 객체들은 비슷한 특성을 가지고 있습니다.
우리는 이러한 객체들을 같은 type 혹은 class에 속한다고 말할 수 있습니다.
클래스는 OOP 의 또다른 중요 개념입니다.
클래스 는 비슷한 오브젝트(객체) 들의 공통적인 구조를 묘사합니다 : 그들의 필드와 메서드들.
이는 비슷한 객체들에 대한 템플릿이나 청사진으로 고려 될 수 있습니다.
오브젝트는 클래스의 개별적인 인스턴스입니다.
위에서 캡슐화의 규칙을 말했던 것에 일치하여,
어떠한 클래스던지 black box 로서 고려되어야 합니다.
이는 클래스를 사용하는 유저들이 오직 클래스의 일부분인 인터페이스만 보고 사용 할 수 있게 해야 한다는 것을 의미합니다.
즉, 내부 구현에서 선언된 속성들과 메서드들의 목록은 파헤쳐지면 안된다는 것입니다.
그럼 밑의 예제를 봐 봅시다.
예제 1 - 빌딩 클래스
각각츼 빌딩은 동일한 속성을 가지고 있습니다 :
- 층의 수 (integer 숫자)
- 면적 (float 소수점 숫자, 미터의 제곱)
- 건축연도 (integer 숫자)
각각의 빌딩 유형에 따른 오브젝트(객체) 는 동일한 속성을 가지지만, 서로 다른 값을 가집니다.
예를 들어 :
- Building 1 :
floors = 4
,area = 2400.16
,year of construction = 1966
- Building 2 :
floors = 6
,area = 3200.54
,year of construction = 2001
빌딩의 행동 양식을 결정하는 것은 꽤 어렵습니다만, 이 예제는 속성을 꽤 잘 설명했습니다.
예제 2 - 비행기 클래스
빌딩과는 다르게, 비행기의 행동 양식을 결정하는 것은 쉽습니다 :
비행기는 두 지점 사이를 날며, 당신을 이동시켜 줍니다.
각각의 비행기는 밑의 속성들을 가집니다 :
- 이름 (문자열 - 예를 들어
Airbus A320
orBoeing 777
) - 최대 탑승객 (integer 숫자)
- 표준 속도 (integer 숫자)
- 현재 좌표
이 또한, 행동 양식 (메서드) 를 가집니다 :
하나의 좌표 점에서 또다른 점으로 탑승객들을 전송합니다.
이러한 행동은 비행기의 상태를 변화시킵니다.
즉, 현재 좌표를 예시로 들 수 있습니다.
Objects and classes - 객체와 클래스
OOP (Object-Oriented-Programming) 에서는,
모든 것을 객체처럼 볼 수 있습니다.
예를 들어 클래스는 객체입니다.
프로그램은 각각의 클래스와 상호작용하는 서로 다른 객체들로 구성되어 있습니다.
객체의 상태와 행동은 주로 결합되지만, 모든 경우에 결합되지는 않습니다.
가끔씩 우리는 상태 혹은 메서드가 없는 객체를 볼 수 있습니다.
물론 이는, 프로그램의 목적과 객체의 성격에 의존합니다.
예를 들면, 유틸리티 클래스들이 스스로의 변수 혹은 state를 가지지 않은 경우가 많다.
예를 들어, 인터페이스라는 것이 있습니다.
유저 인터페이스는 아니지만, 자손 클래스들에게 인터페이스로 보장받기 위해 계승하도록 쓰이는 클래스입니다.
서브 클래스들이 어떠한 인터페이스를 사용함으로서 어떤 성격을 지니는지 알 수 있습니다.
이는 상태가 없는 클래스입니다.
C++에서 역사적인 이유로 구조가 존재합니다.
지금 C++ 에서의 구조는 또한 클래스이지만,
조금 시간을 거슬러 올라간다면, 구조는 오로지 속성만을 가지고 있었으며, 어떠한 메서드도 가지고 있지 않았습니다.
이는 특별한 경우이며, 이 구조는 가끔 유용했습니다.
Conclusion - 결론
Object-Oriented-Programming (객체지향 프로그래밍) 은
아키텍처의 작업과 유사합니다.
아키텍처 처럼, 당신은 클래스 라고 불리우는 템플릿을 생성 할 수 있으며,
이러한 클래스의 개별적인 인스턴스(object)들을 만들 수 있습니다.
빌딩의 주민처럼, 유저들은 혼자서 클래스의 필드와 메서드와 상호작용하며,
굳이 내부적인 구현 세부사항을 파헤쳐 볼 필요는 없는 것 입니다.
이러한 규칙은 encapsulation (캡슐화) 로 흔하게 알려져 있습니다.
OOP 는 많은 프로그래밍 언어들에서 중요한 부분인데,
이는 C++
, C#
, Java
, Kotlin
, Python
, Ruby
등이 있습니다.
OOP 의 숙달은 당신이 코드를 작성 할 때 정돈되게 해 주며,
간단히 코드를 업데이트 할 수 있습니다.
또한, 이는 모든 코더들에게 있어 본질적인 기술입니다.
words to remember
characterized : 특성화된, 특성을 나타내다, 특성을 부여하다, 성격을 부여하다
somewhat : 약간, 얼마간
appropriate : 적절한
derived : 파생된, 유래된
notion 개념, 의향
accommodate : 수용하다, 편의를 도모하다, 숙박시키다, 적응시키다
constitute : 구성하다, 임명하다, 제정하다
accordance : 일치, 일치하는, 조화하는
namely : 즉,
coordinates : 좌표, 위도와 경도
made up : 구성하다, 만든, 결의가 굳은
descendant : 자손
akin : 비슷한, 혈족의, 유사해
inhabitants : 주민
solely : 혼자서, 다만
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introduction to Docker' 카테고리의 다른 글
YAML - YAML 문법과 사용법 (0) | 2024.07.09 |
---|---|
Interfaces - 인터페이스 (0) | 2024.07.03 |
Framework - 프레임워크 (0) | 2024.06.23 |
Web development - 웹 개발 (0) | 2024.06.22 |
HTTP: HyperText Transfer Protocol - HTTP에 대해서 (1) | 2024.06.21 |