객체지향에 대해 알아보자

우빈·2024년 4월 11일
1
post-thumbnail

사람들이 매우 좋아하는 객체지향이 무엇인지에 대해 개념을 정리해보자.

이 글에서는...

  • 객체지향(OO)과 패러다임, 다음과 같은 OO에서의 개념들을 설명합니다.
  • identity
  • classification
  • persistence

객체지향이 뭐야?

객체지향은 소프트웨어 개발 방법론 중 하나로, 소프트웨어를 모듈화하고 객체들 간의 상호작용에 중점을 둔다는 개념이다.

객체를 사용하는 이유는 뭘까?

현실에서 사용되는 개념들을 객체로 만들어 사용하는 걸 의미하는데,
왜 객체로 만들어 사용할까?

다음과 같은 고양이가 있다고 가정해보자.
우리는 현실 세계에서 이 고양이를 표현해보라고 할 때 매우 자세하게 표현할 수 있다.

조금 비인간적으로 이를 대해보면
심혈관이 OO에 어디에서 서식하며 어떤 DNA로 이루어진 ...

프로그래밍에서 현실 세계 고양이의 모든 특징을 다 담을 순 없다.
그래서 추상화라는 작업을 진행한다.

공통적으로 크게 구분되는 속성으로만 고양이를 분류하는 것이다.
예를 들면 색깔, 고양이 종, 나이 등등의 속성으로만 말이다.

그렇다면 객체 지향은?

객체 지향은 이러한 객체들을 기준으로 프로그래밍하는 개발 방법론이다.
여기에는 위에서 말한 추상화를 포함해 여러가지 개념이 들어간다.

클래스와 객체

객체지향 프로그래밍에서는 데이터와 해당 데이터를 처리하는 기능을 포함하는 클래스를 정의한다. 이와 관련된 자세한 글은 나의 벨로그 데뷔 글에 있으니 확인하면 좋을 것 같다.

객체는 왜 붕어빵이 아닐까 링크 근데 저거쓰고 댓글로 욕너무많이먹어서 슬프다

캡슐화

객체의 상태나 행위 등을 하나로 묶는 것을 의미한다.
여기서는 객체의 상세 내용을 숨기고 외부에 필요한 것만 노출시키는데,
흔히 스프링부트에서 getter, setter로 자주 사용한다.

객체지향에서 캡슐화를 지키려면 절대 기본적인 속성이 외부에서 직접 변경이
되어서는 안된다.

상속

상속은 주관적으로 굉장히 매력적인 개념이다.
어떠한 클래스를 상속받아서 새로운 클래스를 만들 수 있다.

사람을 상속받은 학생, 동물을 상속받은 고양이, 자동차를 상속받은 아반떼 등등
특정 객체를 묶어 표현할 수 있는 그룹 또는 상위의 객체를 상속받을 수 있다.

이는 다형성과도 관련이 있는데, 다형성은 주관적으로 약간 모호한 개념이라고 생각해 추후에 글에서 또 다루어보곘다.

왜 사용할까?

  • 객체지향 프로그래밍은 복잡한 문제를 해결하는데 효과적이다.
  • 모듈화와 재사용성을 높여 유지보수가 쉽다.
  • 확장성 있는 소프트웨어를 개발하는 데 도움이 된다.

객체지향의 추가적인 속성들

그럼 이제 객체지향의 추가적인 속성들에 대해 알아보자!

아이덴티티

Identity는 객체지향 프로그래밍에서 객체를 식별하는 데 사용되는 개념이다.
객체의 identity는 객체를 고유하게 식별하는 값이며, 메모리 주소나 참조값으로 표현될 수 있다.

이 identity를 사용하여 자바가 특정 객체들의 동등성을 판별한다.
자바는 isEqual 등의 메서드에서 identity를 사용하여 객체의 동등성을 판별한다.

이렇게 보면 DB를 연결한다고 가정했을 때 primary key로도 사용될 수 있겠다.

분류

객체지향 프로그래밍에서는 데이터와 해당 데이터를 처리하는 기능을 하나의 단위로 묶어 클래스를 정의한다.

객체지향 분류에서는 클래스를 상속, 구성 또는 인터페이스 구현 등의 방법으로 다양한 관계를 형성한다. 이러한 객체지향적 분류는 코드의 구조를 개선하고 유지보수를 용이하게 만든다.

따라서 객체지향 프로그래밍에서의 분류는 클래스의 조직화와 관계를 통해 데이터와 기능을 논리적으로 분류하는 것을 의미한다.

영속성

영속성은 데이터나 상태의 지속성을 의미한다.
데이터를 저장하고 그것을 나중에 불러올 수 있는 능력을 가리킨다.

객체 지향 프로그래밍에서 객체의 영속성은 객체의 상태가 메모리에서 보존되고 유지되는 능력을 가리킨다.

일반적으로 객체가 메모리에서 생성되고 프로그램이 종료되면 상태가 손실되는데, 영속성을 통해 객체의 상태가 파일이나 데이터베이스와 같은 영구적인 저장소에 저장되고 나중에 불러올 수 있다.

마무리

막상 나는 지금 함수 지향 언어에 대해 깊게 공부하고 있지만,
객체 지향 프로그래밍에 대해 굉장히 우호적인 편이다.

프런트엔드를 공부하고 있지만 이에 대해서도 나름 객체지향적으로 설계하는 법을
고려하곤 한다. 때론 클린 코드라고 생각한 설계법이 객체지향일 때도 있다.

앞으로도 객체지향과 친하게 지내려고 노력해야겠다..!!!

profile
프론트엔드 공부중

0개의 댓글