좋은 설계란 무엇일까?
좋은 설계란 요구하는 기능을 정확하게 수행하면서, 추후 변경을 매끄럽게 수용할 수 있는 설계!
코드의 변경이 필요할 때, 해당 코드가 이해하기 쉬워야 변경이 간편하다. 따라서, 변경하기 쉬운 코드는 그 자체로도 이해하기 쉬운 코드를 의미한다. 대개는 이러한 코드를 지향하며 코드를 작성하게 된다. 이를 위해 다양한 프로그래밍 패러다임과 아키텍처 패턴을 프로젝트에 도입하여, 체계적이고 깔끔한 코드 구조를 구현할 수 있게 되는 것이다.
객체?
객체(Object)는 현실 세계의 물체나 개념을 소프트웨어 세계로 옮긴 것! 여기서 객체는 여러 속성과 행동[메서드]으로 구성된다. 객체는 정보[데이터]와 그 정보를 처리하는 행동[함수 또는 메서드]을 가지고 있고, 각 객체들은 서로 메서드 호출을 통해 메시지를 주고 받아 협력한다.
객체 지향?
객체 지향(Object-Oriented)은 소프트웨어 개발에서 주요 구성 요소를 기능(Function)이 아닌 객체(Object)로 삼으며 “어떤 객체가 어떤 일을 할 것인가”에 초점을 맞춘다. 즉, 객체를 도출하고 각각의 역할을 명확하게 정의하는 것에 초점을 맞추는 방법론이다. 이 방법은 크고 복잡한 시스템도 효과적으로 분해하고 구성하며, 개발자가 손쉽게 이해하고 효율적으로 관리할 수 있도록 도와준다.
객체 지향을 어떻게 구분하는가?
절차 지향과 객체 지향 소프트웨어를 구분하는 방법은 아래의 기준을 만족할 경우 객체 지향, 만족하지 않으면 절차 지향적인 성격을 가진다고 할 수 있다.
- 캡슐화, 다형성, 상속을 지원하는가? → 여기서 클래스(Class)는 객체를 생성할 때 사용하는 틀이며, new 키워드를 통해 객체(인스턴스)를 생성할 수 있다.
- 데이터 접근 제한(Access modifier)이 가능한가? → 데이터 접근 제한은 특정 데이터에 대한 외부 접근을 제한하여, 데이터의 안정성과 보안을 높여준다.
객체 지향 프로그래밍 (Object-Oriented Programming, OOP)
- 프로그래밍 패러다임(Programming Paradigm)
프로그래밍의 방식이나 관점을 바탕으로 효율적이고 명확한 코드를 작성하는 방법. 프로그래밍 세계에서는 대표적으로 세 가지의 패러다임이 존재한다!
- 구조적 프로그래밍 (Structured Programming): 기능 중심적인 개발을 진행. 프로그래밍이라는 기술이 시작되면서 가장 처음으로 적용된 패러다임.
- 객체 지향 프로그래밍 (Object-Oriented Programming, OOP): 프로그램의 처리단위가 객체인 프로그래밍 방법. “현실 세계를 프로그램으로 모델링”하는 가장 대표적인 프로그래밍 패러다임.
- 함수형 프로그래밍 (Functional Programming): 함수를 중심적으로 개발을 진행. 세 가지 패러다임 중 가장 초기에 만들어졌지만, 최근들어 주목받기 시작한 패러다임.
- 객체 지향 프로그래밍
객체지향 프로그래밍(Object-Oriented Programming)은 상태(데이터)와 그 데이터를 조작하는 프로세스(메서드)가 같은 모듈 내부에 배치되는 프로그래밍 방식을 의미한다. 코드를 추상화하여 개발자가 더욱 직관적으로 사고할 수 있게 하고, 객체는 고유한 특성을 가지고 있으며, 특정 기능을 수행할 수 있다. 즉, 현실 세계의 객체를 유연하게 표현해주는 방식이다.
객체 지향 프로그래밍은 데이터와 기능이 밀접하게 연결되어 있기 때문에, 코드의 구조와 동작을 직관적으로 파악할 수 있다. 또한, 객체 지향의 특성으로 인해 하나의 객체에 정의된 기능이나 데이터 구조는 다른 객체에서도 쉽게 재사용 할 수 있다. 이로 인해 코드의 재사용성과 확장성이 향상되고, 결과적으로 개발 시간을 효율적으로 관리할 수 있게 되는 것이다!!!
객체 지향 프로그래밍의 핵심 원칙
- 캡슐화 (Encapsulation)
객체 내부의 세부적인 사항을 감추는 것. 즉, 중요한 정보를 외부로 노출시키지 않도록 만드는 것을 캡슐화(Encapsulation)라고 한다.
- 상속 (Inheritance)
하나의 클래스가 가진 특징(함수, 변수 및 데이터)을 다른 클래스가 그대로 물려 받는 것. 이미 정의된 상위 클래스의 특징을 하위 클래스에서 물려받아 코드의 중복을 제거하고 코드 재사용성을 증대시킨다.
- 추상화 (Abstraction)
객체에서 공통된 부분을 모아 상위 개념으로 새롭게 정의하는 것을 추상화(Abstraction)라고 한다. 즉, 불필요한 세부 사항을 생략하고, 중요한 특징만을 강조함으로써 코드를 더욱 간결하고 관리하기 쉽게 만드는 원칙이다.
- 다형성 (Polymorphism)
하나의 객체(클래스)가 다양한 형태로 동작하는 것을 의미한다. 이는 객체가 가진 특성에 따라 같은 기능이 다르게 재구성된다고 할 수 있다. 즉, 동일한 메서드나 함수 명을 사용하더라도, 클래스마다 그 메서드가 다르게 동작하는 것이 다형성의 핵심이다.

'CS' 카테고리의 다른 글
면접 질문 연습하기(2) (1) | 2024.10.25 |
---|---|
TCP 서버를 공부하기 전에... (2) | 2024.10.17 |
IOCP? (1) | 2024.10.15 |
메모리? (9) | 2024.10.08 |
CPU? (0) | 2024.10.08 |