OOP (Object-Oriented Programming, 객체지향 프로그래밍)
1. 객체 지향
프로그램을 '객체' 하나하나의 모임으로 구성하는 방식.
추상화하고자 하는 객체의 모습을 가상의 공간에 구체화하며 설계해 나가는것.
어떤 대상을 소스코드로 그리기 위한 컴퓨터 공학적 사고 방식을 의미한다.
2. 객체 (Instance, 인스턴스)
객체 = 속성인 데이터 + 행동인 메서드 를 함께 묶은 개념
현실세계에 있는 어떤 대상을 추상화 한 것을 의미한다.
물체, 생물등의 명사가 객체라고 생각하면 될듯. 감정이나 생각들도 객체로 표현할 수 있음.
3. 클래스 (Class)
객체를 생성하기 위한 템플릿 = 클래스
객체를 생성하기 위해 어떤 속성과 방법의 집합을 추상화하여 표현한것을 의미한다.
클래스 안에는 함수, 변수가 있고, 클래스안에 클래스를 또 만들수도 있음.
클래스 안에 있는 맴버함수와 변수에 접근하기 위해서는 반드시 객체를 이용해야 함.
3-1. 상속
만약 다른 클래스의 기능을 사용하고 싶다면 상속을 받아서 부모클래스와 자식클래스의 관계를 만들면 됨
[동물] 클래스 안에 '걷기'함수, '숨쉬기'함수가 있다면
[개]클래스와 [고양이]클래스를 만들 때 [동물]클래스를 상속받아서 공통되는 기능을 중복구현하지 않을 수 있다.
3-2. 오버라이딩
상속받은 클래스에서 어떤 기능을 재정의하는것을 의미
예를 들어 부모클래스에 'get()'이라는 함수가 있는데, 자식 클래스에서 똑같이 'get()'이라는 함수를 만들고 그 함수의 기능에 대해서는 다시 정의하는 것.
함수 이름을 똑같이 정의하고 기능을 수정하는 것을 말한다.
3-3. 오버로딩
함수의 이름은 같으나 매개변수를 다르게 설정하여 사용 목적에 따라 다르게 불러오는것을 의미
연산자 오버로딩, 메소드 오버로딩, 함수 오버로딩 등 다양하게 있지만, 파이썬에서는 함수오버로딩은 없다고 생각하시면 된다. (구현이 불가능한것은 아님)
객체지향 프로그래밍의 4가지 주요 개념
1. 캡슐화(Encapsulation)
데이터의 무결성을 유지하고 객체의 상태를 외부에서 잘못된 방식으로 조작하지 못하게 함.
코드를 보다 모듈화하고 복잡성을 줄이며 유지보수를 용이하게 만듦
2. 상속(Inheritance)
하나의 클래스(부모 클래스 또는 슈퍼클래스)의 속성과 메서드를 다른 클래스(자식 클래스 또는 서브클래스)가 물려받는 것.
자식 클래스는 부모 클래스의 기능을 그대로 사용하거나, 확장하여 새로운 기능을 추가할 수 있음.
코드의 재사용성을 높여주며, 계층적인 구조를 통해 클래스 간의 관계를 명확하게 정의
공통된 기능을 부모 클래스에서 정의하고, 이를 여러 자식 클래스에서 공유함으로써 중복 코드를 줄일 수 있음
3. 다형성(Polymorphism)
하나의 메서드가 여러 다른 클래스에서 다양한 형태로 구현될 수 있는 능력.
동일한 메서드 호출이 객체의 실제 타입에 따라 다르게 동작할 수 있
코드의 유연성과 확장성을 높임
동일한 코드가 다양한 객체에 대해 올바르게 동작할 수 있게 하여, 프로그램을 보다 일반적이고 유연하게 설계할 수 있음
4. 추상화(Abstraction)
복잡한 시스템에서 핵심적인 개념이나 기능만을 표현하고, 불필요한 세부 사항은 감추는 것.
사용자에게 필요한 기능만을 제공하고, 구현의 세부 사항을 숨김으로써 인터페이스를 단순화할 수 있음
사용자가 객체의 내부 구조를 이해하지 않고도 객체를 사용할 수 있게 하며, 코드를 더 쉽게 이해하고 사용할 수 있도록 도와줌.
상속과 다형성(Polymorphism)의 차이점
상속은 코드 재사용과 계층적 관계를 정의하는 데 중점을 두고,
다형성은 다양한 객체들이 동일한 인터페이스를 통해 다르게 동작할 수 있게 하는 유연성을 제공함.
1. 정의
상속은 하나의 클래스(부모 클래스 또는 슈퍼클래스)가 가진 속성과 메서드를 다른 클래스(자식 클래스 또는 서브클래스)가 물려받는 것
자식 클래스는 부모 클래스의 기능을 그대로 사용하거나, 확장하여 새로운 기능을 추가할 수 있음
다형성은 하나의 메서드가 여러 다른 클래스에서 다양한 형태로 구현될 수 있는 능력
동일한 메서드 호출이 객체의 실제 타입에 따라 다르게 동작할 수 있는 것을 의미
2. 목적
상속의 주된 목적은 코드의 재사용성과 계층적 관계를 표현
코드 중복을 줄이고 유지보수성을 높임
다형성의 목적은 코드의 유연성 및 확장성을 제공하는 것
동일한 메서드나 인터페이스가 다양한 클래스에서 다르게 구현될 수 있으며, 코드의 일반화와 다형성을 통해 객체 지향 설계를 유연하게 만들 수 있음.
3. 구현 방식
상속은 클래스 간의 관계를 통해 구현
자식 클래스는 부모 클래스를 상속받아 그 기능을 확장하거나 재정의할 수 있음
다형성은 주로 메서드 오버라이딩(부모 클래스에서 정의한 메서드를 자식 클래스에서 재정의)과 인터페이스를 통해 구현
인터페이스는 클래스들이 동일한 메서드를 다르게 구현할 수 있도록 하고 다양한 객체들이 동일한 방식으로 사용될 수 있게 함
'CS' 카테고리의 다른 글
[CS] 알아야 하는 개념들 (0) | 2024.08.01 |
---|---|
[CS] 소프트웨어 설계 (0) | 2024.07.29 |
[CS] 컴파일러/인터프리터/메모리영역 (0) | 2024.07.28 |
[CS] 자료형/자료구조 (0) | 2024.07.26 |
[CS] 운영체제 (0) | 2024.07.26 |