ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OOP
    Intern 2024. 6. 26. 09:09
    728x90

    프로그램을 보다 유연하고 변경이 용이하게 만든다

    코드의 변경을 최소화하고 유지보수하는 데 유리

    코드의 재사용을 통해 반복적인 코드를 최소화하고, 코드를 최대한 간결하게 표현

    인간 친화적이고 직관적인 코드를 작성하기에 용이

     

    *객체 : 객체 지향 프로그래밍의 가장 기본적인 단위이자 시작점

    • 객체들 간의 상호작용을 통해 발생한다는 점에서 출발
    • 모든 실재하는 대상

     

    객체지향 프로그래밍에서는 각각의 객체를 속성과 기능으로 분류한 후, 이것을 다시 각각 변수와 함수로 정의

    • 기본적인 학습을 선행하시거나 전체적인 흐름을 중심으로 콘텐츠 소비

     

     

    추상화

    • 사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것
    • 공통성과 본질을 모아 추출
    • 불필요한 세부 사항은 제거하고 가장 본질적이고 공통적인 부분만을 추출하여 표현

     

    : 객체의 공통적인 속성과 기능을 추출하여 정의하는 것

     

    추상 클래스, 인터페이스

     

    *인터페이스

    • 서로 다른 두 시스템, 장치, 소프트웨어 따위를 서로 이어주는 부분 또는 그런 접속 장치
    • 어떤 객체의 역할만을 정의하여 객체 간의 관계를 보다 유연하게 연결
    • 어떤 객체가 수행해야 하는 핵심적인 역할만을 규정해두고, 실제적인 구현은 해당 인터페이스를 구현하는 각각의 객체들에서 하도록 프로그램을 설계

     

    인터페이스에 정의한 역할각각의 클래스의 맥락에 맞게 구현.

    역할과 구현의 분리 —> 보다 유연하고 변경에 열려있는 프로그램을 설계하기 위해 역할과 구현을 분리

     

    상속

    • 기존의 클래스를 재활용하여 새로운 클래스를 작성
    • 상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 기능들을 간편하게 사용
    • 한번만 정의해두고 재사용할 수 있어 반복적인 코드를 최소화하고 공유하는 속성과 기능에 간편하게 접근하여 사용

     

    메서드 오버라이딩 : 추상 클래스로 상속받은 기능 재정의

     

     

    추상화 : I/F를 통한 구현 vs 상속

    • 상속 : 상위 클래스의 속성과 기능들을 하위 클래스에서 그대로 받아 사용하거나 선택적으로 재정의
    • I/F 구현 : 인터페이스에 정의된 추상 메서드의 내용이 반드시 하위 클래스에서 정의

     

    상속이 I/F 구현보다 추상화의 정도가 낮음

     

    다형성

    • 어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할 수 있는 객체 지향의 특성
    • 메서드 오버라이딩 / 메서드 오버로딩
    • 같은 이름의 메서드가 상황에 따라 다른 역할을 수행
    • 한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것

    : 객체 간 관계와 협력을 보다 유연하고 확장이 용이하도록 설계

    ‘이동 수단’과 같은 넓은 범위의 타입, 상위 클래스 타입의 참조 변수로 그것과 관계있는 하위 클래스들을 참조할 수 있는 능력

     

    JAVA에서 배열 == 하나의 같은 Type으로 이뤄져 있는 자료 구조

    • 하나의 Type만으로 여러 가지 Type의 객체를 참조
    • 하나의 객체가 다른 객체의 속성과 기능에 접근하여 어떤 기능을 사용할 때, A클래스는 B클래스에 의존한다고 표현한다.

    Driver 클래스가 Car 클래스와 MotorBike 클래스에 의존하고 있다고 설명할 수 있음

    객체들 간의 결합도가 높다고 표현

     

    역할과 구현을 구분하여 객체들 간의 직접적인 결합을 피하고, 느슨한 관계 설저을 통해 보다 유연하고 변경이 용이한 프로그램 설계 가능

     

    각각의 클래스 내부의 변경이나 다른 객체가 새롭게 교체되는 것을 신경쓰지 않아도 인터페이스에만 의존하여 수정이 있을 때마다 코드 변경을 하지 않아도 된다.

     

    Dependency Injection

    -> 객체 간 높은 결합도를 보이는 상황을 해결하기 위해 나온 것

     

     

     

    캡슐화

    • 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것
    • 외부로부터 클래스에 정의된 속성과 기능들을 보호하고, 필요한 부분만 외부에 노출될 수 있도록 하여 각 객체 고유의 독립성과 책임 영역을 안전하게 지키고자 하는 목적

    JAVA는 제어자가 존재하나, Python은 제어자가 없어 개발자들의 암묵적 합의가 있어야 한다

    해당 클래스나 멤버들을 외부에서 접근하지 못하도록 접근을 제한하는 역할

    728x90
Designed by Tistory.