새소식

자바 스크립트

객체지향 프로그래밍: 핵심 원칙과 효과적인 설계 전략

  • -
728x90

좋은 설계란 요구하는 기능을 정확하게 수행하며 변경을 매끄럽게 수용할 수 있는 설계. 나중에 변경하기 쉬운 코드. 변경하기 쉬운 코드란 곧 이해하기 쉬운 코드를 뜻한다.

그래서 이를 위해 패러다임과 아키텍처 디자인 양식을 따라야 한다.

https://www.reddit.com/r/ProgrammerHumor/comments/418x95/theory_vs_reality/

객체란?

현실 세계의 물체나 개념을 소프트웨어로 옮긴 것.

객체는 여러 속성과 행동[메서드]으로 구성된다.

객체는 정보[데이터]와 그 정보를 처리하는 행동[메서드]을 가지고 있다.

객체지향이란 무엇일까?

소프트웨어 개발에서 구성 요소를 기능이 아닌 객체로 삼으며 어떤 객체가 어떤 일을 할 것인가 에 초점을 맞춘 것

즉, 객체를 도출하고 각자의 역할을 명확하게 정의하는 것에 초점을 맞추는 걸 뜻한다.

그래서 객체지향에서는 책임과 권한을 가진 객체들이 서로 메시지를 주고받아 협력하여 필요한 기능을 수행하게 하는 방법론을 뜻합니다.

절차지향과 객체지향을 어떻게 구분할까? 아래 기준을 만족하면 객체지향이라 부른다.

1. 캡슐화, 다향성, 상속을 지원하는가

여기서 클래스는 객체를 생성할 때 사용하는 툴이며, new 키워드를 통해 특정 객체를 생성할 수 있다.

2. 데이터 접근 제한이 가능한가?

데이터 접근 제한은 특정 데이터에 대한 외부 접근을 제한하며, 데이터의 안정성과 보안성을 높여줍니다.

프로그래밍 패러다임

프로그래밍의 방식이나 관점을 바탕으로 효율적이고 명확한 코드를 작성하는 방법을 뜻한다.

- 구조적 프로그래밍 : 특정 기능을 중심적으로 개발하는 것

- 객체 지향 프로그래밍 : 프로그래밍 처리 단위가 객체인 프로그래밍 방법

- 함수형 프로그래밍 : 함수를 중심으로 개발을 진행한다.

그럼 이 중 많이 쓰이는 객체 지향 프로그래밍은 무엇을 뜻하는 걸까?

객체지향 프로그래밍이란, 상태(데이터)와 그 데이터를 조작하는 프로세스(메서드)가 같은 모듈 내부에 배치되는 프로그래밍 방식을 의미한다.

코드를 추상화하여 개발자가 더욱 직관적으로 사고할 수 있게 하는 대표적인 방법론

자동차, 동물, 사람과 같은 현실 세계의 객체를 유연하게 표현할 수 있다.

객체는 고유한 특성을 가지고 있고, 특정 기능을 수행할 수 있다.

무엇을 목표로 코드를 작성해야 할까?

객체지향 프로그래밍을 바탕으로 문제 상황을 빠르게 인지하고, 어떤 코드에서 오류가 발생했는지 빠르게 찾아보며, 오류사항을 빠르게 고쳐 개발에 사용하는 시간을 최대한으로 줄이는 것을 목표로 삼아야 한다.

객체지향 프로그래밍은 프로그램을 객체들의 집합으로 볼 수 있는 설계 원칙을 제공한다. 이 원칙에 따라, 각 객체는 특정 데이터를 임의로 처리할 수 있는 메서드로 처리할 수 있어야 한다.

객체 지향 프로그래밍은 데이터와 기능이 밀접하게 연결되어 있기 때문에, 코드의 구조와 동작을 직관적으로 파악할 수 있어야 한다.

또한 하나의 객체로 정의된 기능이나 데이터 구조는 다른 객체에서도 쉽게 재사용할 수 있기 때문에 코드의 재사용성과 확장성이 향상되고 이를 통해 개발 시간을 효율적으로 관리할 수 있게 된다.

객체지향프로그래밍의 핵심 원칙 4가지 - 여기에만 맞춰도 자동 객체지향 프로그래밍

- 캡슐화

객체 내부의 세부적인 사항을 감추는 것. 즉 중요한 정보를 외부로 노출시키지 않도록 만드는 걸 캡슐화 라고 합니다.

집의 현관문을 생각해 본다면, 저희는 집 안을 외부에게 노출시키지 않기 위해 현관문을 잠글 수 있습니다. 여기서 현관문은 저희가 데이터 접근할 수 있는 방법을 제한하는 메서드와 같아요.

- 상속

하나의 클래스가 가진 특징(함수, 변수 및 데이터)을 다른 클래스가 그대로 물려받는 것을 말합니다.

이미 정의된 상위 클래스의 특징을 하위 클래스에서 물려받아 코드의 중복을 제거하고 코드 재사용성을 증대시킵니다.

- 추상화

객체에서 공통된 부분을 모아 상위 개념으로 새롭게 정의하는 것을 추상화라고 합니다. 즉, 불필요한 세부 사항을 생략하고 중요한 특징만을 강조함으로써 코드를 더욱 간결하고 관리하기 쉽게 만드는 게 원칙입니다.

클래스를 설계할 때, 공통적으로 묶일 수 있는 기능을 추상화 > 추상 클래스 > 인터페이스 순으로 정리한다면, 여러 클래스 간의 일관성을 유지하면서, 다양한 형태로 확장될 수 있는 코드, 즉 다형성ㅇ ㅣ가능해집니다.

 

> 여기서 인터페이스란, 클래스를 정의할 때, 메서드와 속성만 정의하여, 인터페이스에 선언된 프로퍼티 또는 메서드의 구현을 강제하여 코드의 일관성을 유지하게 합니다.

- 다형성

하나의 객체(클래스)가 다 향한 형태로 동작하는 것. 이는 객체가 가진 특성에 따라 같은 기능이 다르게 재구성된다는 것을 의미합니다. 다형성은 역할(인터페이스)구현을 분리하게 해 줍니다. 따라서, 오버라이딩을 통해 특정 서비스의 기능을 유연하게 변경하거나 확장할 수 있습니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.