[개발상식] 객체 지향 프로그래밍이란?

이상돈·2023년 6월 9일
0
post-thumbnail

📌 객체 지향 프로그래밍이란?

인간 중심적 프로그래밍 패러다임이라고 할 수 있다.

원칙

  1. SRP(Single Responsibility Principle) : 단일 책임 원칙
    클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.
  2. OCP(Open-Closed Principle) : 개방-패쇄 원칙
    확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
  3. LSP(Liskov Substitution Priciple) : 리스코프 치환 원칙
    상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
  4. ISP(Interface Segregation Priciple) : 인터페이스 분리 원칙
    인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
  5. DIP(Dependency Inversion Priciple) : 의존 역전 원칙
    고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.

특징

  1. 추상화
    • 객체에서 공통된 속성과 행위를 주출 하는 것
    • 공통의 속성과 행위를 찾아서 타입을 정의하는 과정
    • 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것
이미지출처 : https://velog.io/@nayeon/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-OOPObject-Oriented-Programming

아우디, 니싼, 볼보는 모두 '자동차' 라는 클래스에 속한다. 즉 자동차라는 클래스를 만들어두고 여기서 자동차들이 가진 공통적인 특징들을 추상화시켜 클래스를 만든다.

  1. 캡슐화
    • 데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것(변수와 함수를 하나로 묶는 것을 뜻한다)
    • 낮은 결합도를 유지할 수 있도록 설계하는 것
이미지출처 : https://velog.io/@nayeon/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-OOPObject-Oriented-Programming

속성과 기능을 정의하는 변수와 메소드를 클래스라는 캡슐에 넣어서 분류하는 것으로 재활용이 원활하다는 장점이 있고 캡슐화를 통해서 정보은닉을 활용 할 수도 있다.

  1. 상속
    • 클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것을 말한다.
이미지출처 : https://jongminfire.dev/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%B4%EB%9E%80
  1. 다형성
    • 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것
    • 어떠한 요소에 여러 개념을 넣어 놓는 것

객체 지향 프로그래밍은 하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성이라는 특징을 갖게 된다.

오버라이딩
오버라이딩은 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의 해서 사용하는 것
오버로딩
오버로딩은 하나의 클래스 내부에서 같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것

출처 •https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Development_common_sense
https://jongminfire.dev/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%B4%EB%9E%80

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글