All about OOP

클래스와 객체 지향 프로그래밍

※ 이 글은 chatGPT를 기반으로 작성한 글입니다.

 

 클래스(class)와 객체(object)는 객체 지향 프로그래밍(Oriented-Object Programming)의 근간이 되는 개념이다.

  ㉠ 클래스는 객체를 만들기 위해 사용하는 설계도 혹은 템플릿에 해당한다.

  ㉡ 인스턴스(instance)는 클래스가 구체화되는 것을 의미한다.

    ⓐ 클래스의 인스턴스는 객체에 포함된다.

    ⓑ 인스턴스는 고유한 데이터 또는 상태, 동작 또는 방법, 정체성을 가진 클래스가 구체화된 대상을 일컫는다. 인스턴스는 클래스 Blueprint에서 생성되며 해당 클래스의 다른 인스턴스와 동일한 구조와 동작을 갖지만 고유한 값과 특성을 가집니다.

 

객체 지향 프로그래밍(OOP)에서 인스턴스(instance)와 객체(object)라는 용어는 클래스의 특정한 발생을 나타내기 위해 서로 교환적으로 사용된다.그러나, 그 둘 사이에는 미묘한 차이가 있다. 인스턴스(instance)는 고유한 데이터 또는 상태, 동작 또는 방법 및 ID를 갖는 클래스의 단일 실현입니다. 클래스 Blueprint에서 생성되며 해당 클래스의 다른 인스턴스와 구조 및 동작이 동일합니다.오브젝트(object)는 클래스의 인스턴스를 포함하여 컴퓨터 프로그램에서 조작할 수 있는 모든 항목을 설명하는 데 사용되는 일반적인 용어이다. 개체는 데이터 구조, 사용자 정의 데이터 유형 또는 속성과 메서드가 있는 더 복잡한 엔터티일 수 있습니다.그러므로 객체는 프로그램의 다른 엔티티뿐만 아니라 인스턴스를 포함하는 보다 일반적인 개념이다. 인스턴스는 객체의 특정 구현이며 클래스에서 생성됩니다.

클래스는 현실 세계를 모방해 ~

클래스(class)는 데이터와 함수를 함께 묶은 형태로 수단을 제공한다.

  ㉠ 새로운 클래스를 만들면 새로운 타입의 객체가 만들어지며, 해당 타입으로 만들어진 새로운 객체


대표적인 예시로 Person 클래스를 생각해볼 수 있다. 이 클래스는 name, age, address와 같은 attribute를 가질 것이다. 그리고 speak(), walk(), eat() 같은 메서드를 지원할 것이다.

  ㉠ 모든 객체는 클래스에서 생성되며, 독립적인 attribut와 method를 갖는다.


객체지향 프로그래밍에서 4가지 주요한 원칙이다.
1. 추상화 : OOP(Obstraction in Object-Oriented Programming)에서 추상화는 객체의 본질적인 characteristics과 behavior을 기반으로 객체를 모델링하여 복잡한 시스템을 단순화할 수 있는 원리이다. 추상화는 클래스의 구체적인 구현을 숨기고 필요한 정보만 외부에 노출하는 것을 포함한다.
추상화를 사용하면 객체의 낮은 수준의 세부 정보를 추상화하고 높은 수준의 동작에 집중할 수 있습니다. 예를 들어, 엔진 작동 방식에 대해 걱정할 필요 없이 추상화를 사용하여 자동차 클래스를 만들 수 있습니다. 당신이 알아야 할 것은 차가 시동을 걸고, 멈추고, 운전할 수 있다는 것이고, 이러한 행동들은 적절한 method을 통해 이용할 수 있다는 것이다.
OOP에서 추상화를 달성하는 방법에는 크게 두가지가 있다.
1)추상 클래스 : 추상 클래스는 자체적으로 인스턴스화할 수 없는 클래스입니다. 다른 클래스가 상속할 기본 클래스 역할만 합니다. 추상 클래스는 추상적인 방법과 구체적인 방법(즉, 구현된 method)을 모두 가질 수 있다. 추상 클래스에서 파생된 구체적인 클래스는 모든 추상 메서드에 대한 구현을 제공해야 합니다.
2)인터페이스: 인터페이스는 객체 지향 프로그래밍(OOP)에서 추상화를 지원하는 핵심 메커니즘이다. 인터페이스는 객체와 현실 세계 사이의 연결고리를 제공하며 객체가 구현해야 하는 일련의 method을 명시한다. 인터페이스는 구현을 제공하지 않고 메서드 서명 집합을 정의합니다. 클래스들은 하나 이상의 인터페이스들을 구현할 수 있고 메소드들의 실제 구현을 제공할 수 있다. 이것은 서로 다른 클래스의 객체를 공통 인터페이스의 객체로 취급할 수 있게 하며, 서로 다른 유형의 객체와 상호 작용하는 통합 인터페이스를 제공함으로써 추상화를 가능하게 한다.

추상화는 복잡성을 줄이고 코드 유지보수성을 향상시키는 데 유용하다. 또한 시스템의 나머지 부분에 영향을 미치지 않고 클래스의 구현 세부 정보를 더 쉽게 변경할 수 있습니다. 추상화를 사용하면 새로운 요구사항에 쉽게 적응할 수 있는 유연하고 재사용 가능한 코드를 만들 수 있습니다.

2. 캡슐화 : 이 원칙은 data(attributes)와 behavior(methods)를 single unit으로 묶는 것을 다룬다. 이는 객체의 상태를 관리하고 보호하기 훨씬 용이하게 해준다. 캡슐화는 클래스의 구현 세부 정보를 숨기고 사용자의 실수로 개체 상태가 수정되는 것을 방지할 수 있다.



3. 상속 : 이 원칙은 이미 존재하는 클래스의 attributes와 methods를 새로운 클래스가 상속받게 한다. 코드를 재새용할 수 있게 해주며, 불필요한 중복을 감소시킨다. 깔끔하고 조직화된 코드를 장려한다. 상속은 두 클래스의 관계를 is-a 관계로 표현하는 방법이 있다.

4. 다형성 : 이 원칙은 서로 다른 클래스가 동일한 메서드의 호출에 다르게 응답하는 객체의 능력을 다룬다. 다형성은 객체가 파생 클래스의 인스턴스인 경우에도 객체를 기본 클래스의 객체로 취급할 수 있게 한다. 이를 통해 런타임에 객체의 정확한 클래스를 알 필요 없이 다른 클래스의 객체를 일반적인 방식으로 처리할 수 있는 코드를 작성할 수 있다.

OOP는 이 네 가지 원칙을 결합함으로써 요구사항의 변화에 따라 쉽게 수정하고 확장할 수 있는 강력하고 유지보수 가능한 소프트웨어 시스템을 구축할 수 있습니다.

'All about OOP' 카테고리의 다른 글

객체(Object)와 인스턴스(Instance)의 차이  (0) 2023.02.01