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

이건우·2021년 11월 29일
0

객체지향 프로그래밍에 대해서 알아보겠습니다

프로그래밍 패러다임(Programming Paradigm)

  • 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 한다. 새로운 프로그래밍 패러다임을 통해서는 새로운 방식으로 생각하는 법을 배우게 되고, 이를 바탕으로 코드를 작성하게 된다.
  • 명령형 프로그래밍: 무엇(What)을 할 것인지 나타내기보다 어떻게(How) 할 건지를 설명하는 방식

    • 절차지향 프로그래밍: 수행되어야 할 순차적인 처리 과정을 포함하는 방식 (C, C++)
    • 객체지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현 (C++, Java, C#)
  • 선언형 프로그래밍: 어떻게 할건지(How)를 나타내기보다 무엇(What)을 할 건지를 설명하는 방식

    • 함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식 (클로저, 하스켈, 리스프)

객체지향 프로그래밍이란 무엇일까요 ?

  • 객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나로 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호 작용을 통해 로직을 구성하는 프로그래밍 방법 입니다

객체지향 프로그래밍과 절차지향 프로그래밍 ?

  • 객체 지향 프로그래밍과 절차지향 프로그래밍의 차이는 아래의 예시를 보면 쉽습니다

언뜻 보면 둘은 같아 보일 수 있습니다 하지만 둘의 큰차이점은 저런식으로 진행된다가 아니라

객체지향 프로그래밍은 객체의 디자인을 한 뒤에 이들의 데이터플로우를 짜고 진행시나리오를 설계해나가는 방식의 개발방법론일 뿐입니다. 플로우차트 먼저 짜느냐, 데이터모델링을 먼저 하느냐의 차이일 뿐이지 그 이후로는 절차지향 프로그램이나 객체지향 프로그램이나 다들 정해진 알고리즘을 따라 순서대로 실행되는건 마찬가지입니다.

그렇다면 객체 지향 프로그래밍의 장단점은 어떤게 있을까요 ?

  • 장점
  1. 코드 재사용이 용이
    • 남이 만든 클래스를 가져와서 이용 할 수 있고 상속을 통해 확장해서 사용 할 수 있다
  2. 유지보수가 쉬움
    • 절차 지향 프로그래밍에서는 코드를 수정해야 할 때에 일일이 찾아 수정 해야하는 반면 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다
  3. 대형 프로젝트에 적합
    • 클래스 단위로 모듈화시켜서 개발 할 수 있으므로 대형 프로젝트 처럼 여러명, 여러 회사에서 프로젝트를 개발 할 때 업무 분담하기가 쉽다 .
  • 단점
  1. 처리속도가 상대적으로 느림
  2. 객체가 많으면 용량이 커질 수 있음
  3. 설계시 많은 시간과 노력이 필요

객체지향 프로그래밍의 키워드 5개

  • 클래스 + 인스턴스(객체)
  • 추상화
  • 캡슐화
  • 상속
  • 다형성

클래스와 인스턴스에 대해 알아보자

  • 클래스란 ?
    • 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의 한 것 으로 객체를 만들기 위한 메타정보 라고 볼 수 있습니다
  • 인스턴스란 ?
    • 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터

      위의 예시와 같이 클래스와 인스턴스는 서로 상속 관계 이다
      또한 클래스를 더 디테일 하게 나눌 수도 있다

      위의 예시처럼 서로 상속 상속 상속을 하게 된다

객체지향 프로그래밍에서 추상화란 ?

  • 객체지향 프로그래밍에서는 추상화 라는 단어를 여러군데 붙일 수 있다 .
    여기서 말하는 추상화는 추상 클래스나 추상 메서드를 의미 하기 보다는 클래스를 설계 하는 것 자체를 의밓란다 즉, 추상화란 공통의 속성이나 기능을 묶어 이름을 붙이는 것이다

캡슐화란 무엇일까 ?

  • 캡슐화의 목적 2가지
  1. 코드를 재수정 없이 재활용 하는것 .

  2. 접근 제어자를 통한 정보 은닉

    절차 지향 프로그래밍에서도 라이브러리를 통해서 변수와 함수를 재활용 할 수는 있었지만, 코드의 수정이 일어났을 때 영향 범위를 예상하기 어려운 문제가 있었다 .

    그러나 객체지향 프로그래밍에서는 캡슐화를 통해 객체가 외부에 노출하지 않아야 할 정보 또는 기능을 접근 제어자를 통해 적절히 제어 권한이 있는 객체에서만 접근이 가능하도록 할 수 있기에 코드의 수정이 일어났을 때 책임이 있는 객체만 수정 하면 되기에 영향 범위를 예측하는데 수월해졌다.

    뿐만 아니라 관련된 기능과 특성을 한곳에 모으로 분류하기 때문에 기능과 특성의 모음을 클래스 라는 캡슐에 분류해서 넣는것이 캡슐화다

상속이란 무엇일까 ?

  • 절차지향 프로그래밍에서도 라이브러리를 통해서 남이 짜놓은 소스코드를 가져와 사용 할 수 있었습니다 하지만 내의도에 맞게 수정하게 되면 다른 라이브러리가 되어 버전에 따라 동작 하지 않을 수도 있고 불필요한 코드의 수정 작업을 해야 합니다

    이런 문제를 해결하기 위해 상속 이라는 것을 도입 하였습니다
    상속은 부모클래스의 속성과 기능을 그대로 이어받아 사용 할 수 있게 하고 기능의 일부분을 변경해야 할 경우 상속 받은 자식 클래스에서 해당 기능만 다시 수정하여 사용 할 수있게 하는 것 입니다

다중상속은 불가합니다 클래스의 상속 관계에서 혼란을 줄 수 있기 때문에 상속은 반드시 하나만 가능하고 필요에 따라 인터페이스를 사용 할 수 있게 했습니다

다향성 이란것은 무엇일까 ?

  • 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석 될 수 있다는 뜻입니다
    즉 오버라이딩, 오버로딩이 가능하다는 이야기 입니다
    • 오버라이딩: 부모 클래스의 메서드와 같은 이름 , 매개변수를 재정의 하는것
    • 오버로딩: 같은 이름의 함수를 여러개 정의하고 , 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출 할 수 있게 하는것 입니다 .

이렇게 객체 지향 프로그래밍에 대한 것과 키워드 5개를 알아보았습니다 .

profile
주니어 개발자 이건우 입니다 .

0개의 댓글