오늘은 프로그래밍 패러다임 중 하나인 객체지향 프로그래밍론이다. 처음에 자바를 배울 때 알지 못했지만 지금이라도 개념을 다시 잡고 가기 위해서 발표를 준비해봤다.!
객체지향이란 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 객체들은 서로 메세지를 주고 받을 수 있으며 데이터 처리가 가능합니다.
객체지향 특징을 한 문장으로 설명하자면 강한 응집력과 약한 결합력이라고 할 수 있다. 여기서 응집력이란 클래스나 모듈 안의 요소들이 얼마나 밀접되어 있는 정도를 나타내는 것이고 결합력이란 다른 것들과 얼마나 의존적인지를 나타내는 정도를 말한다.
이걸 모르면 객체지향을 알고 있다고 말할 수 없다. 클래스, 객체, 인스턴스이다. 객체와 인스턴스의 차이점은 무엇일까.?!
설명으로만 들으면 이해가 힘드니 코드로 살펴봅시당.
코드에서 보면 맨 위에 Animal 이라는 클래스를 만들어놨습니다. 그 밑에 Main 클래스 안에
Animal cat, dog 이 부분을 객체라고 합니다. 그 밑에 new Animal()을 통해서 객체를 실체화해준 것을 인스턴스라고 합니다. 객체와 인스턴스는 비슷한 듯 다른 존재랍니다!
추상화
캡슐화
상속
다형성
추상화란 불필요한 정보를 숨기고 중요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어서 이름을 붙이는 것입니다. 예시를 들어보겠습니다.
서든어택 -> 넥슨의 fps 게임 -> fps 게임 -> 게임
이마크 -> 남자 -> 인간 -> 동물
이런식으로 추상화를 시킬 수 있습니다.
객체의 데이터를 외부에서 직접 접근하지 못하게 막고, 함수를 통해서만 조작 가능하게 하는 것이다. 캡슐화는 재사용하기 쉽다는 장점이 있습니다.
코드를 살펴보면 sound를 private으로 선언해서 외부에서 접근을 못하게 막았습니다. 그리고 메소드를 하나 만들어 이곳을 통해서만 값을 조작할 수 있게 만들었습니다.
자식 클래스는 부모클래스의 속성과 기능을 이어받아 사용할 수 있다. 부모 클래스의 기능을 수정하여 사용할 수 있게 하는 것입니다. 클래스의 다중 상속은 불가능하고 인터페이스만 다중 상속이 가능합니다.
Animal 이라는 부모 클래스를 상속 받은 cat 이라는 자식 클래스가 있습니다. 이 자식 클래스에서는 부모 클래스에서 선언했던 sound()라는 메소드를 사용할 수 있습니다. 이런 방법으로 부모 클래스의 기능을 사용할 수 있습니다.
하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것입니다. 대표적인 예시로는 오버라이딩이 있습니다.
자식 클래스에서 부모 클래스의 메소드인 sound()를 오버라이딩해서 자식클래스에서 재정의를 해줬다.
검색하면서 흥미로운 사실을 발견했다. 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