TIL 53 | OOP(Object Oriented Programming)

임종성·2021년 10월 19일
2

TIL

목록 보기
21/22
post-thumbnail

개발과 관련된 좋은 영상을 찾아보다가 객체지향 프로그래밍에 대한 이야기를 듣게 되었습니다. OOP에 대한 최소한의 이해는 있었다고 생각하지만 객체의 책임, 역할, 메시지와 관련된 이야기를 듣다 보니 객체지향 프로그래밍에 대한 이해도가 낮다고 생각했습니다. 따라서 객체지향 프로그래밍에 대해 깊게 알아보고자 합니다.

객체지향 프로그래밍(OOP)

객체 지향 프로그래밍(Object-Oriented Programming, OOP)컴퓨터 프로그래밍의 패러다임 중 하나입니다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것입니다.

객체 지향 프로그래밍 이전의 프로그래밍 패러다임을 살펴보면 중심이 컴퓨터에 있었고, 컴퓨터가 사고하는대로 프로그래밍을 하는 것이었습니다. 하지만 객체지향 프로그래밍이란 인간 중심적 프로그래밍 패러다임이라고 할 수 있습니다. 즉, 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말합니다.

OOP의 4가지 특징

추상화(Abstraction)

추상화는 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하고 사물들의 공통적인 특징, 즉 추상된 특징을 파악해 인식의 대상으로 삼는 행위를 말합니다.

추상화는 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 수단입니다. 각 객체의 구체적인 개념에 의존하지 말고 추상적 개념에 의존해야 설계를 유연하게 변경할 수 있습니다. 다시말해 추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법이라고 할 수 있습니다.

캡슐화(Encapsulation)

캡슐화란 하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶는 것을 의미합니다.

SW 공학에서는 높은 응집도낮은 결합도를 유지할 수 있도록 설계해야 요구사항을 변경할 때 유연하게 대처할 수 있습니다.

응집도 - 클래스나 모듈 안의 요소가 얼마나 밀접하게 관려있는지를 나타냅니다.
결합도 - 어떤 기능을 실행하는 데 다른 클래스나 모듈에 얼마나 의존하는지 나타냅니다.

정보은닉

캡슐화는 정보은닉을 통해 높은 응집도와 낮은 결합력을 갖게 합니다. 정보은닉이란 필요가 없는 정보는 외부에서 접근하지 못하도록 제한하는 것인데, private 키워드를 통해 데이터를 보호해 접근을 제한합니다.

상속성(Inheritance)

상속이란 기존 상위 클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념입니다.

기존 클래스의 기능을 가져와 재사용할 수 있으면서도 새로운 기능을 추가할 수 있게 해줍니다. 여러 개체가 가진 공통된 특성을 부각시켜 하나의 개념이나 법칙으로 성립시키는 과정입니다.

따라서 같은 특징있는 클래스를 그대로 물려받아, 다시 작성할 필요없이 재사용으로 효율성을 늘린다. 이를 통해 다형성을 확보할 수 있습니다.

다형성(polymorphism)

다형성은 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해줍니다. 즉, 다형성은 형태가 같은데 다른 기능을 하고 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력입니다.

다형성은 상속과 연계되어 동작하면 매우 강력한 힘을 발휘합니다. 다형성과 일반화 관계는 코드를 간결하게 하여 재사용과 유지보수가 용이하도록 도와주고 변화에도 유연하게 대처할 수 있게 해줍니다.

OOP에서 다형성의 개념을 녹여내는 방법은 두가지인데, 바로 오버라이딩(Overriding)과 오버로딩(Overloading)입니다.

오버라이딩(Overriding)

오버라이딩은 부모 클래스에서 상속받은 자식 클래스에서 부모 클래스에서 만들어진 메서드를 자신의 입맛대로 다시 재정의해서 사용하는 것을 말합니다.

오버로딩(Overloading)

오버로딩은 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념입니다. 오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 갯수나 데이터 타입이 다르면 오버로딩이 적용됩니다.


참고자료

객체지향프로그래밍
객체지향프로그래밍의 4가지 특성
OOP의 특징
WeareSoft/tech-interview

profile
어디를 가든 마음을 다해 가자

0개의 댓글