OOP 객체지향 프로그래밍론

minhee·2020년 10월 20일
0

오늘은 프로그래밍 패러다임 중 하나인 객체지향 프로그래밍론이다. 처음에 자바를 배울 때 알지 못했지만 지금이라도 개념을 다시 잡고 가기 위해서 발표를 준비해봤다.!

객체지향이란?

객체지향이란 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 객체들은 서로 메세지를 주고 받을 수 있으며 데이터 처리가 가능합니다.

특징

객체지향 특징을 한 문장으로 설명하자면 강한 응집력과 약한 결합력이라고 할 수 있다. 여기서 응집력이란 클래스나 모듈 안의 요소들이 얼마나 밀접되어 있는 정도를 나타내는 것이고 결합력이란 다른 것들과 얼마나 의존적인지를 나타내는 정도를 말한다.

장점

  1. 코드 재사용이 용이하다.
    남이 만든 클래스를 가져와서 이용할 수 있으며 상속을 통해서 더욱 확장시킬 수 있다.
  2. 유지보수가 쉽다.
    절차지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정을 해야하는 번거로움이 있다. 하지만 객체지향 프로그래밍에서는 수정해야 할 부분의 메소드나 필드만 수정해주면 되기 때문에 절차지향에 비해서 유지보수가 쉽다.
  3. 대형 프로젝트에 적합하다.
    클래스 단위로 모듈화를 시켜 각자 개발할 수 있다.

단점

  1. 처리속도가 절차지향에 비해서 상대적으로 느리다.
  2. 객체가 많으면 그만큼 용량도 커진다.
  3. 설계시 많은 시간과 노력이 필요하다.

꼭 알고 넘어가야하는 개념

이걸 모르면 객체지향을 알고 있다고 말할 수 없다. 클래스, 객체, 인스턴스이다. 객체와 인스턴스의 차이점은 무엇일까.?!

  • 클래스: 객체를 만들어내기 위한 설계도 혹은 툴, 연관되어 있는 변수와 메서드의 집합
  • 객체: 구현할 대상으로 클래스에 선언된 모양 그대로 생성된 실체, 구현할 대상
  • 인스턴스: 객체를 실체화한 것, 구현이 된 것

설명으로만 들으면 이해가 힘드니 코드로 살펴봅시당.

코드에서 보면 맨 위에 Animal 이라는 클래스를 만들어놨습니다. 그 밑에 Main 클래스 안에
Animal cat, dog 이 부분을 객체라고 합니다. 그 밑에 new Animal()을 통해서 객체를 실체화해준 것을 인스턴스라고 합니다. 객체와 인스턴스는 비슷한 듯 다른 존재랍니다!

객체지향 프로그래밍 키워드 4가지

추상화
캡슐화
상속
다형성

추상화

추상화란 불필요한 정보를 숨기고 중요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어서 이름을 붙이는 것입니다. 예시를 들어보겠습니다.

서든어택 -> 넥슨의 fps 게임 -> fps 게임 -> 게임
이마크 -> 남자 -> 인간 -> 동물

이런식으로 추상화를 시킬 수 있습니다.

캡슐화

객체의 데이터를 외부에서 직접 접근하지 못하게 막고, 함수를 통해서만 조작 가능하게 하는 것이다. 캡슐화는 재사용하기 쉽다는 장점이 있습니다.

코드를 살펴보면 sound를 private으로 선언해서 외부에서 접근을 못하게 막았습니다. 그리고 메소드를 하나 만들어 이곳을 통해서만 값을 조작할 수 있게 만들었습니다.

상속

자식 클래스는 부모클래스의 속성과 기능을 이어받아 사용할 수 있다. 부모 클래스의 기능을 수정하여 사용할 수 있게 하는 것입니다. 클래스의 다중 상속은 불가능하고 인터페이스만 다중 상속이 가능합니다.

Animal 이라는 부모 클래스를 상속 받은 cat 이라는 자식 클래스가 있습니다. 이 자식 클래스에서는 부모 클래스에서 선언했던 sound()라는 메소드를 사용할 수 있습니다. 이런 방법으로 부모 클래스의 기능을 사용할 수 있습니다.

다형성

하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것입니다. 대표적인 예시로는 오버라이딩이 있습니다.

자식 클래스에서 부모 클래스의 메소드인 sound()를 오버라이딩해서 자식클래스에서 재정의를 해줬다.

C언어로 객체지향 구현이 가능하다?

검색하면서 흥미로운 사실을 발견했다. c언어로 객체지향 구현이 가능하다는 사실이다. 임베디드나 펌웨어 관련 프로젝트에서 여러가지 사정으로 c언어를 사용해서 구현를 한다고 합니다. 커널이나 라이브러리가 절대적으로 필요한 경우라고 합니다.

출처
https://jeong-pro.tistory.com/95
https://velog.io/@cyranocoding/객체-지향-프로그래밍OOP-Object-Oriented-Programming-개념-및-활용-정리-igjyooyc6c
https://gmlwjd9405.github.io/2018/07/05/oop-features.html

0개의 댓글