객체 지향 프로그래밍 (OOP)
1. 객체 지향 프로그래밍 (Object-Oriented Programming)
기존의 프로그래밍 방식은 크게 2가지로 나눌 수 있다. 첫 번째로 절차적 프로그래밍 방식은 프로그래밍을 처음 시작할 때처럼 어떤 입력을 받아 명시된 순서대로 처리하고 결과를 내는 방식이다. 두 번째로 구조적 프로그래밍 방식이 있다. 구조적 프로그래밍 방식은 절차적 프로그래밍 방식의 한계를 개선한 형태의 프로그래밍 방식이다. 프로그램을 함수 단위로 나눈 뒤 함수끼리 호출하는 방식이다. 어떠한 큰 요구사항을 해결하기 위해 요구사항을 작은 단위들로 나누어 해결하는 방식이다. 흔히, Top-Down 방식이라고도 부른다.
객체 지향 프로그래밍, OOP는 구조적 프로그래밍 방식의 한계를 개선한 형태의 프로그래밍 방식이다. 프로그래밍에 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체(Object)를 생성하고, 객체들 간의 상호작용을 통해 구성하는 프로그래밍 방법이다. 쉽게 말해, 요구사항을 관리하기 쉬운 하나의 덩어리 즉, 객체로 나누는 것이다. 각각의 덩어리는 독립적이며 재사용이 가능하다. 이 덩어리들을 조합하여 큰 요구사항을 해결하는 Bottom-Up 방식이라고도 부른다.
이러한 객체 지향 프로그래밍도 장점과 단점이 분명히 존재한다. 아래에 장점과 단점들을 나열한다.
장점 1. 코드의 재사용성 증가
장점 2. 유지보수가 쉬움
장점 3. 간결하고 직관적인 코드
단점 1. 처리시간에 있어서 비교적 시간이 오래 걸림
단점 2. 설계시 많은 고민과 시간을 투자해야 함 (단점이라고 보기는 어렵지만 여튼 그럼)
2. 객체 (Object)와 클래스 (Class)
객체(Object)는 변수(속성), 함수(행위)로 구성된 대상이다. 여기서 변수는 Property, Attribute를, 함수는 Methods, Behaviour를 통칭한다.
위 그림은 자동차 모델을 기반으로 여러 가지 객체를 생성하는 것을 보이고 있다. 앞서 설명한 것처럼, 자동차 모델의 Property로는 모델, 가격, 색상, 연비 등이 있을 것이다. Method로는 가속, 감속, 정지 등이 있을 것이다. 이처럼, 객체의 기본이 되고 정형화된 모델을 클래스(Class)라고 부른다. 그림의 하단에 있는 Red, Blue, Green Car는 Car Class를 기반으로 만들어진 각각의 자동차 객체이며 이를 인스턴스(Instance)라고 부른다.
3. OOP의 주요 특징
객체 지향 프로그래밍(OOP)은 다음과 같은 주요 특징들을 갖는다.
1. 캡슐화 (Encapsulation)
생성한 객체의 Property와 Method를 은닉할 수 있다. 이렇게 캡슐화 된 Property와 Method는 외부에서 접근할 수 없다. 이는, 정보 보호에 있어서 유용하다. 또한, 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는데에 의의를 둔다.
2. 상속 (Inheritance)
Class의 기능을 확장하고자 할 때, 현재 Class의 기능을 포함하여 새로운 기능이 추가된 새로운 Class를 정의하는 방법이다. 이렇게 상속을 하게 되면 두 클래스는 부모-자식의 관계를 갖게 된다. 자식 Class는 부모 Class의 속성을 물려받게 되며 이 경우, 중복을 방지할 수 있다. 또한, 부모 Class의 수정은 자식 Class에도 영향을 미치게 된다. 따라서 수정에 대한 여파가 적다고 볼 수 있다.
3. 다형성 (Polymorphism)
어떤 Class를 상속하다 보면 자식 Class에서 부모 Class와 같은 이름의 Property나 Method를 사용하는 일이 있다. 이때, 자식 Class에서 이름은 같지만 사용하는 Parameter가 다르거나 아예 다른 동작을 수행하는 Method를 정의할 필요가 있다. 이와 같은 행위를 다형성이라고 한다.
위에 설명한 내용들을 다형성에 존재하는 키워드로 바꿔 말할 수 있다. Method의 이름이 같지만 Parameter가 다른 경우 오버 로딩(Overloading)이라고 부른다. 또, 부모 Class의 Method를 자식 Class의 용도에 맞게 재정의하여 코드의 재사용성을 높이는 것을 오버 라이딩(Overriding)이라고 부른다.
4. 추상화 (Abstraction)
공통되는 Property와 Method를 묶어 표현하는 것이다. 객체 지향적인 관점으로 볼 때, 우리가 Class를 정의하는 행위 자체를 추상화한다고 볼 수 있다. 즉, 복잡한 자료나 모듈 혹은 시스템으로부터 핵심이 되는 개념이나 기능을 간추려 내는 것이다.
References
https://www.udemy.com/course/android-app-development-bootcamp-with-kotlin-masterclass/
Android App Development Bootcamp with Kotlin - Masterclass
Learn Android 11 App Development From Beginner to Advanced Developer. Master Android Studio and build your first app now
www.udemy.com
https://steady-coding.tistory.com/453
[OOP] 추상화(Abstraciton)란?
안녕하세요? 제이온입니다. 이번 시간에는 저번 포스팅인 상속에 이어서 추상하에 대해 알아보겠습니다. 추상화란? 위키피디아에 따르면, 추상화를 아래와 같이 정의하고 있습니다. 컴퓨터 과
steady-coding.tistory.com
https://medium.com/@shaqok8/oop-class-instance-prototype-%EC%A0%95%EB%A6%AC-2a9dfddd94de
OOP, Class/Instance, Prototype 정리
OOP(Object Oriented Programming) 란?
medium.com
https://velog.io/@gyu716625/OOP1
OOP(객체 지향 프로그래밍)이란?
학습을 진행하면서 내가 이해하고 공부한 부분을 기록합니다.컴퓨터에서 사용할 수 있는 언어는 기계어, 어셈블리어, 고급언어가 있습니다. 간단히 정리 해보자면,기계어는 컴퓨터가 사용하는
velog.io