안녕하세요 글루미입니다.
오늘은 객체 지향 설계와 프로그래밍에 대해서 학습한 내용을 정리해보겠습니다🤣
인공지능과 보안을 공부하던 저는 `Java`와 `OOP`에 대한 개념을 알고는 있었지만 거의 사용해보지 못했었는데요, 이번에 학습하면서 상당히 어려웠던 기억이 있습니다.
OOP, 객체 지향 프로그래밍이란?
`OOP(Obejct-Oriented Prgramming)`, 즉 객체 지향 프로그래밍이란 컴퓨터 프로그래밍의 패러다임 중 하나로, 컴퓨터 프로그램을 명렁어와 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 `객체`들의 모임으로 파악하고자 하는 것입니다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있습니다.
객체 지향 프로그래밍은 프로그램을 유연하고 변경이 쉽게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용됩니다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점이 있습니다. 프로그램의 객체와 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 합니다.
출처: https://ko.wikipedia.org/wiki/객체_지향_프로그래밍
객체 지향 프로그래밍 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목
ko.wikipedia.org
- 클래스 `Class`: 클래스는 객체를 생성하기 위핸 청사진입니다. 클래스는 데이터와 메서드를 포함할 수 있으며, 특정 유형의 객체를 정의합니다. 예를 들어, 자동차라는 클래스를 정의하면, 이 클래스는 자동차의 속성(예: 색상, 모델, 연료 유형 등)과 메서드(예: 주행, 정지 등)를 포함할 수 있습니다.
- 객체 `Object`: 객체는 클래스를 기반으로 실제로 생성된 인스턴스입니다. 즉, 클래스의 구체적인 실체로, 클래스에서 정의한 속성과 메소드를 가집니다. 예를 들어, 자동차 클래스에서 내 차라는 객체를 만들면, 내 차는 특정 색상과 모델을 가진 실제 자동차를 나타냅니다.
- 인스턴스 `Instance`: 인스턴스는 객체와 같은 의미로 사용되지만, 일반적으로 클래스의 구체적인 예를 강조하는 개념입니다. 즉, 클래스에서 생성된 객체를 일컬어 인스턴스라고도 합니다. 따라서 내 차는 자동차 클래스의 인스턴스라고 할 수 있습니다.
요약하자면, 클래스는 객체를 정의하는 설계도이고, 객체는 그 설계도를 기반으로 생성된 실체이며, 인스턴스는 객체의 구체적인 예시를 나타냅니다. `OOP`에서 이러한 개념들은 코드의 재사용성과 유지 보수성을 높이는 데 기여합니다.
1. 프로퍼티 (Property)와 메소드 (Method)
- 프로퍼티 (Property):
- 프로퍼티는 객체의 상태나 특성을 나타내는 변수입니다. 클래스 내에서 정의되며, 객체가 가지는 데이터입니다. 예를 들어, 자동차 클래스의 프로퍼티로는 색상, 모델, 연료 유형 등이 있을 수 있습니다.
- 메소드 (Method):
- 메소드는 클래스 내에서 정의된 함수로, 객체가 수행할 수 있는 동작이나 행동을 나타냅니다. 메소드는 객체의 프로퍼티에 접근하거나 수정하는 데 사용되며, 예를 들어 자동차 클래스의 메소드로는 주행(), 정지(), 연료 보충() 등이 있을 수 있습니다.
2. 캡슐화 (Encapsulation)
- 캡슐화는 객체의 상태(프로퍼티)를 외부에서 직접 접근하지 못하도록 감추고, 이를 조작하는 메소드를 통해서만 접근하도록 하는 개념입니다. 이를 통해 데이터 보호와 코드의 유지보수성을 높일 수 있습니다. 예를 들어, 자동차 클래스의 속성을 `private`로 선언하면 외부 코드에서 직접 접근할 수 없고, 메소드를 통해서만 속성을 수정하거나 조회할 수 있습니다.
3. 상속 (Inheritance)
- 상속은 기존 클래스(부모 클래스)의 속성과 메소드를 새로운 클래스(자식 클래스)가 물려받는 개념입니다. 이를 통해 코드의 재사용성을 높이고, 계층 구조를 만들어 더 구체적인 클래스를 정의할 수 있습니다. 예를 들어, 차량이라는 부모 클래스가 있고, 자동차와 트럭이라는 자식 클래스가 있을 때, 자동차와 트럭은 차량의 속성과 메소드를 상속받을 수 있습니다.
4. 다형성 (Polymorphism)
- 다형성은 같은 인터페이스나 메소드 이름을 사용하더라도, 서로 다른 클래스에서 다르게 구현할 수 있는 능력을 의미합니다. 이를 통해 하나의 메소드가 여러 형태로 동작할 수 있습니다. 예를 들어, `주행()`이라는 메소드를 자동차 클래스와 자전거 클래스에서 각각 다르게 구현할 수 있습니다. `OOP`에서는 일반적으로 메소드 오버로딩과 메소드 오버라이딩을 통해 다형성을 구현합니다.
이러한 개념들은 객체 지향 프로그래밍의 핵심 원칙으로, 소프트웨어 개발 시 코드의 구조와 유지보수성을 향상시키는 데 중요한 역할을 합니다.
'Naver boostcamp' 카테고리의 다른 글
[학습 정리] 네이버 부스트캠프 챌린지 Day08 학습 정리 (0) | 2024.07.24 |
---|---|
[학습 정리] 네이버 부스트캠프 챌린지 Day07 학습 정리 (0) | 2024.07.23 |
[회고] 네이버 부스트캠프 9기 챌린지 1주차 위클리 회고 (0) | 2024.07.21 |
[학습 정리] 네이버 부스트캠프 챌린지 Day04 학습 정리 (0) | 2024.07.18 |
[학습 정리] 네이버 부스트캠프 챌린지 Day03 학습 정리 (0) | 2024.07.17 |