본문 바로가기
목차훔치기/면접을 위한 CS 전공지식 노트

객체지향 프로그래밍(면접을 위한 CS 전공지식 노트)

by 해삼2 2023. 8. 18.
728x90
반응형

 

객체지향 프로그래밍

객체지향 프로그래밍

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 개발 패러다임 중 하나로, 

현실 세계의 개념과 구조를 프로그래밍에 반영하여 코드를 구성하는 방법론입니다. 

이 접근 방식은 프로그램을 '객체'라 불리는 작은 단위로 나누고, 이러한 객체들 간의 상호작용을 통해 

프로그램을 구축하는 방식입니다.

 

객체지향 프로그래밍 주요 특징

객체(Object): 

현실 세계의 실체나 개념을 프로그래밍에 반영한 단위로, 데이터와 해당 데이터를 다루는 메서드

(함수)의 집합으로 이루어져 있습니다. 

객체는 클래스(class)라는 템플릿을 기반으로 생성됩니다.

클래스(Class): 

객체를 생성하기 위한 템플릿으로, 객체의 속성(변수)과 동작(메서드)을 정의합니다. 

클래스는 추상적인 개념이며, 실제 객체를 생성하기 위해선 이 클래스를 기반으로 객체를 생성해야 합니다.

상속(Inheritance): 

클래스 간의 관계를 표현하는 방법으로, 한 클래스가 다른 클래스의 특성(변수와 메서드)을 

물려받을 수 있습니다. 

이로써 코드 재사용성이 증가하고 계층적인 구조를 갖게 됩니다.

다형성(Polymorphism): 

다른 클래스의 객체가 같은 메서드 호출에 대해 서로 다르게 동작할 수 있는 능력을 의미합니다. 

이를 통해 코드의 유연성이 증가하며, 여러 클래스를 동일한 인터페이스로 다룰 수 있습니다.

캡슐화(Encapsulation): 

객체의 상태와 동작을 외부로부터 감추는 개념으로, 객체의 내부 구현을 숨기고 외부에서 필요한 부분에만 

접근을 허용함으로써 코드의 유지보수성과 보안성을 높입니다.

객체지향 프로그래밍은 현실 세계의 복잡성을 모델링하고, 모듈화 된 구조를 통해 대규모 소프트웨어 

개발을 용이하게 합니다. 

주요 장점으로는 코드의 재사용성, 유지보수성, 확장성, 추상화 등이 있습니다. 

주요 언어로는 Java, C++, Python, C# 등이 있으며, 현대 소프트웨어 개발에서 널리 사용되는 

중요한 개념 중 하나입니다.

 

객체지향 프로그래밍 장점

코드 재사용성(Reusability): 

객체지향 프로그래밍은 클래스와 상속을 통해 코드를 모듈화하고 구조화하여 재사용이 용이한 코드를 

작성할 수 있습니다.

이미 작성한 클래스를 다른 프로젝트나 부분에서 활용할 수 있어 개발 속도를 높일 수 있습니다.

유지보수성(Maintainability): 

객체지향 프로그래밍은 캡슐화와 추상화를 통해 내부 구현을 숨기고 외부 인터페이스를 다루기 때문에 

변경이 필요한 경우 해당 클래스 내부만 수정해도 되므로 코드 유지보수가 용이합니다.

확장성(Scalability): 

새로운 기능을 추가하기 위해 새로운 클래스를 작성하거나 기존 클래스를 확장하여 사용할 수 있습니다. 

이는 프로그램을 확장하거나 변경할 때 유연성을 제공합니다.

추상화(Abstraction): 

객체지향 프로그래밍은 복잡한 시스템을 모델링할 때 필요한 핵심 개념에 초점을 맞추어 표현할 수 있도록 

도와줍니다. 

이로써 개발자는 복잡한 세부사항을 무시하고 핵심 개념에 집중할 수 있습니다.

다형성(Polymorphism): 

다형성을 통해 여러 클래스를 하나의 인터페이스로 다룰 수 있으므로, 유연하고 확장 가능한 코드를 

작성할 수 있습니다.

 

 

객체지향 프로그래밍 단점

복잡성(Complexity): 

객체지향 프로그래밍은 설계와 구현이 상대적으로 복잡할 수 있습니다. 

클래스와 상속의 계층 구조, 다형성 등을 이해하고 올바르게 구현하는 것이 어려울 수 있습니다.

성능 부하(Performance Overhead): 

객체 지향적인 구조는 추상화와 캡슐화로 인해 추가적인 메모리와 처리 시간을 필요로 할 수 있습니다. 

이는 미세한 수준에서는 성능 저하를 초래할 수 있습니다.

학습 곡선(Learning Curve): 

객체지향 프로그래밍은 초보자에게는 학습 곡선이 높을 수 있습니다. 

객체, 클래스, 상속 등의 개념을 이해하고 적용하는 데 시간이 걸릴 수 있습니다.

코드 양 증가(Code Bloat): 

OOP에서는 불필요한 중복 코드가 생성될 수 있으며, 이로 인해 코드 양이 증가할 수 있습니다.

설계 비용(Design Overhead): 

초기에 올바른 객체지향 설계를 수립하는 것은 시간과 비용이 많이 들 수 있습니다. 

잘못된 설계로 인해 나중에 변경이 어려울 수 있습니다.

이러한 장점과 단점을 고려하여 프로젝트의 목표와 요구사항에 맞게 객체지향 프로그래밍을 적절히 

활용하는 것이 중요합니다.

 

 

객체지향 프로그래밍 자세히알기!!

해성과 학급 관리 시스템

해성이는 학교에서 학급 관리 시스템을 만들기로 했습니다.

 이 시스템은 학생들의 정보와 성적을 관리하고 보여주는 것이 목표입니다. 

해성이는 객체지향 프로그래밍을 사용하여 이 시스템을 개발하려고 합니다.

1. 학생 객체와 클래스
해성이가 먼저 생각한 것은 "학생"이라는 개념입니다. 

학생은 이름, 나이, 성적 등의 특성을 갖고 있습니다. 

해성이는 이러한 특성을 변수로 표현하기 위해 "학생" 클래스를 만들었습니다. 

이 클래스는 학생의 정보를 저장하는 변수들과 학생에 관련된 동작을 수행하는 메서드들로 

구성되어 있습니다.

2. 객체 생성과 데이터 저장
이제 해성이는 실제 학생들의 정보를 저장하기 위해 학생 객체들을 만듭니다. 

학생 객체는 학생 클래스의 인스턴스이며, 각각의 학생 객체는 개별 학생의 정보를 저장하고 관리합니다. 

예를 들어, 해성이는 "철수"라는 학생 객체를 만들어 그 안에 이름, 나이, 성적 등의 데이터를 저장합니다.

3. 상속과 다형성
해성이는 또한 상속과 다형성을 활용하여 학생의 다양한 종류를 나타내고자 합니다. 

예를 들어, "컴퓨터과목" 학생과 "수학과목" 학생은 모두 학생이지만, 추가적인 특성이나 동작이 

있을 수 있습니다. 

해성이는 이런 경우에 각각의 학생 종류에 맞게 클래스를 만들고, 필요한 특성과 동작을 추가합니다. 

이렇게 해서 학생 클래스를 확장하고 변형할 수 있습니다.

4. 캡슐화와 접근 제어
해성이는 학생 객체의 정보가 외부에서 직접 수정되지 않도록 캡슐화와 접근 제어를 사용합니다. 

학생 객체의 데이터는 비공개(private)로 설정되어 있어서 외부에서 직접 접근할 수 없습니다. 

대신에 해성이는 메서드를 사용하여 학생 객체의 데이터를 안전하게 변경하고 조회할 수 있습니다.

5. 학급 관리 시스템의 완성
이제 해성이는 학생 객체들을 활용하여 학급 관리 시스템을 완성했습니다. 

학생들의 정보를 추가하고 수정하며, 필요한 분석을 수행하고 출력하는 기능들을 객체지향 

프로그래밍으로 구현한 것입니다. 

해성이가 이 시스템을 유연하게 확장하거나 변경하려면 객체지향의 장점들을 활용하면 됩니다.

 

 

*바쁜 사람을 위한 깜찍한 정리

객체지향 프로그래밍은 소프트웨어 개발 패러다임중 하나로, 현실 세계의 개념과 구조를 프로그래밍에 반영하여 코드를 구성하는 방법론입니다. 상호작용을 통해 객체들이 서로 통신하고 협력하여 프로그램을 구축합니다. 예를 들어 슈퍼마켓이라는 프로젝트를 만든다고 치면 객체는 슈퍼마켓이고 정육점코스라는 클래스를 만들면 그 객체 안에 필요 한 도구나 진열대 등을 클래스 형태로 전부 만든 다음 서로 상속시키며 다형성을 줘서 소비자들로 하여금 새로운 물건이 와도 서로 다른 가격에 보일 수 있게 만들 수 있습니다.
728x90
반응형