본문 바로가기
IT 기본지식

OOP 객체 지향 프로그래밍의 특징

by 내기록 2022. 2. 19.
반응형

객체 지향 프로그래밍 Object Oriented Programming(OOP) 란? 

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

 

 

장점은?

OOP는 복잡한 것을 단순하고 재사용 가능한 구조로 모델링한다.

재사용한 가능한 OOP object는 여러 프로그램에서 사용할 수 있다.

다형성(Polymorphism)을 통해 클래스별 동작을 허용한다.

캡슐화를 통해 정보를 안전하게 보호할 수 있다.

 

원칙

  1. 추상화(Abstraction)
    : 객체에 액세스하기 위한 상위 수준의 public method만 노출한다.
    사용자가 객체의 선택된 특성 및 method와만 상호작용하는 것을 의미한다.
    - 복잡성을 표현하기 위해 간단한 것 사용
    - 사용자로부터 복잡한 세부 정보 숨기기
    추상화는 복잡성을 표현하기 위해 간단한 클래스를 사용하는 것이다. 추상화는 캡슐화의 확장이다 (어쩐지 비슷하드라)
    예를들어, 우리는 자동차를 운전하기 위해 엔진이 어떻게 작동하는지 모든 세부 사항을 알 필요는 없다.
    운전자는 브레이크와 같은 작은 도구만 사용하고 엔지니어링은 운전자에게 숨겨져있다.

    추상화는 중요한 보안 역할도 한다. 선별된 데이터만 표시하고 클래스를 통해 데이터에 접근하고 method를 통해 수정할 수 있도록 함으로써 데이터가 노출되지 않도록 보호한다. (getter/setter?)
    이점
    - 간단한 고급 사용자 인터페이스
    - Complex code is hidden
    - Security
    - 소프트웨어 관리 용이

    예를 들면.. 하위클래스들에 존재하는 공통적인 메소드를 인터페이스로 정의하는 것이다.

  2. 캡슐화(Encapsulation)
    : 객체에 정보를 포함하고 선택한 정보만 노출한다.

    객체 내부의 모든 중요한 정보를 포함하고 선택된 정보만 외부에 노출시키는 것을 의미한다.
    클래스에서 객체가 인스턴스화되면 데이터와 메서드가 해당 객체에 캡슐화된다.
    캡슐화는 클래스 내부의 내부 코드 구현을 숨기고 내부 객체의 내부 데이터를 숨긴다.

    캡슐화를 수행하려면 일부 필드는 private으로 정의하고 일부는 public으로 정의해야 한다.
    자동차로 비유하자면 차량이 외부와 공유하는 정보는 방향을 표시하기 위해 깜빡이를 사용하는 것이 public interface다.
    반면 엔진은 후드 아래에 숨겨져 있으므로 private interface이다.

    캡슐화는 보안의 기능도 수행하는데 속성 및 메서드를 private로 설정하면 클래스 외부에서 액세스할 수 없다.

    클래스 내에서 대부분의 프로그래밍 언어는 public, protected, private 섹션이 있다.
    - public은 외부나 다른 클래스가 사용할 수 있고
    - protected는 같은 패키지 및 자식 클래스에서만 액세스 할 수 있다
    - private은 해당 클래스 내에서만 액세스할 수 있다.

    캡슐화의 이점
    - Add security: 외부에서는 public method 및 fields만 액세스 할 수 있다.
    - Protects against common mistakes: 개발자가 위험한 내용을 실수로 변경하지 않도록 public fields와 method만 액세스 할 수 있다.
    - Hides complexity: 아무도 그 물건의 커튼 뒤에 무엇이 있는지 볼 수 없다 ㅎㅎㅎ

  3. 상속(Inheritance)
    : 자식 클래스가 부모 클래스에서 데이터 및 동작을 상속한다.

  4. 다형성(Polymorphism)
    : 두 가지 다른 방식으로 동일한 함수를 execute 할 수 있다.
    상속을 사용하면 개체가 공유된 상위 동작을 특정 하위 동작으로 재정의할 수 있다.

    하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석될 수 있는 것
    - overriding : 부모클래스의 메소드와 같은 이름, 매개변수를 재정의 하는 것
    - overloading : 같은 이름의 함수 여러개에 매개 변수의 타입과 개수를 다르게 해서 매개변수에 따라 다르게 호출되는 것

 

 

참고

추상화 vs 캡슐화

예를 들어 세탁기를 사용할 때 어떤 원리로 작동되는지는 모른다. 설명서에 적힌대로 버튼만 눌러서 사용하는게 추상화
버튼을 눌렀을 때, 세탁기가 동작하는데 그 버튼의 기능을 우리가 마음대로 바꿀 수 없다. 세탁기의 내부는 사용자에게 감춰져 있는게 캡슐화

 

 

 

References

https://www.educative.io/blog/object-oriented-programming

반응형

댓글