객체지향 알아보기

HeeSung Lee·2024년 4월 11일
0

객체지향

객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란 컴퓨터 프로그램을 어떤 데이터를 입력받아 순서대로 처리하고 결과를 도출하는 명령어들의 목록으로 보는 시각에서 벗어나 여러 독립적인 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 말한다.

객체지향 패러다임이 무엇인지 알아보자.

패러다임: 한 시대의 사람들의 견해나 사고를 근본적으로 규정하고 있는 인식의 체계. 또는, 사물에 대한 이론적인 틀이나 체계.

객체지향 패러다임은 프로그램의 각 기능과 데이터를 객체로 바라보는 사고를 말한다.

Identity(정체성)

객체는 고유한 식별자를 가지며, 이를 통해 다른 객체와 구별됩니다. 객체의 식별자는 메모리 상의 주소로 생각할 수 있습니다. 이러한 정체성을 통해 객체는 고유하게 식별되고 추적될 수 있습니다.

Classification(분류)

객체는 클래스에 속합니다. 클래스는 객체들이 공유하는 특성과 행동을 정의하는 템플릿입니다. 객체들은 클래스의 인스턴스로, 클래스에 정의된 속성과 메소드를 공유하게 됩니다.

Abstraction(추상화)

추상화는 객체의 중요한 특징을 강조하고 세부 사항을 숨기는 개념입니다. 이를 통해 복잡한 시스템을 단순화하고, 사용자가 객체를 더 쉽게 이해하고 활용할 수 있습니다. 추상화는 클래스와 인터페이스를 통해 구현됩니다.

Inheritance(상속)

상속은 부모 클래스의 특성과 행동을 자식 클래스가 물려받는 개념입니다. 이를 통해 코드의 재사용성을 높이고, 계층 구조를 효과적으로 구성할 수 있습니다. 자식 클래스는 부모 클래스의 모든 속성과 메소드를 상속받지만, 필요에 따라 이들을 수정하거나 확장할 수 있습니다.

Polymorphism(다형성)

다형성은 같은 메소드나 함수가 다른 방식으로 동작하는 개념입니다. 이는 상속과 연관이 깊으며, 하나의 인터페이스를 통해 여러 가지 형태의 객체를 다룰 수 있게 해줍니다. 다형성은 오버로딩(Overloading)과 오버라이딩(Overriding)을 통해 구현됩니다.

Persistence(영속성)

영속성은 객체의 데이터를 영구적으로 저장하고 유지하는 기능을 의미합니다. 이는 파일 시스템, 데이터베이스 등을 통해 구현될 수 있습니다. 객체의 상태를 지속적으로 유지함으로써 데이터의 지속성을 보장하고, 프로그램이 종료되더라도 데이터를 보존할 수 있습니다.

소프트웨어 디자인

소프트웨어 디자인은 소프트웨어를 설계하고 구조화하는 과정을 의미합니다. 이 과정에서는 사용자의 요구사항을 충족시키기 위해 시스템의 기능, 구성요소 및 상호작용을 결정하고 조직화합니다. 좋은 소프트웨어 디자인은 소프트웨어의 품질, 유지보수성, 확장성, 안정성 등을 향상시키며, 효율적이고 신뢰할 수 있는 솔루션을 제공합니다.

요구사항 분석

소프트웨어 디자인의 시작은 요구사항의 분석입니다. 이는 사용자의 요구사항을 이해하고 문제 영역을 파악하는 단계로, 이를 통해 소프트웨어의 목표와 범위를 정의합니다.

구조화

요구사항을 기반으로 시스템을 구조화하는 단계입니다. 이 과정에서는 시스템을 여러 부분으로 분할하고, 각 부분 간의 관계와 상호작용을 정의합니다. 이를 통해 모듈화와 계층화를 통한 소프트웨어의 구조를 개선할 수 있습니다.

설계 패턴과 원칙 적용

설계 패턴과 원칙은 소프트웨어 디자인을 개선하기 위한 지침이나 템플릿으로, 재사용 가능한 해결책을 제공합니다. 객체지향 디자인 패턴, SOLID 원칙 등이 여기에 해당합니다. 이러한 패턴과 원칙을 적용하여 소프트웨어의 유연성과 확장성을 향상시킬 수 있습니다.

모듈화

소프트웨어를 작은 모듈로 분할하여 개발하는 것은 유지보수성을 향상시키고, 코드를 재사용하기 쉽게 만듭니다. 모듈화를 통해 각 모듈은 독립적으로 테스트하고 변경할 수 있으며, 시스템의 전체적인 복잡성을 줄일 수 있습니다.

유지보수성 고려

소프트웨어 디자인은 단순히 초기 요구사항을 충족하는 것뿐만 아니라, 장기적인 유지보수성을 고려해야 합니다. 변경이나 확장이 필요할 때 소프트웨어를 쉽게 수정하고 유지보수할 수 있도록 설계되어야 합니다.

테스트 가능성

소프트웨어 디자인은 테스트 가능성을 고려해야 합니다. 모듈화된 설계와 명확한 인터페이스는 테스트를 용이하게 만들어줍니다. 테스트 가능성을 높이면 버그를 빨리 찾아내고 수정할 수 있으며, 소프트웨어의 품질을 향상시킬 수 있습니다.

사용자 경험(UX) 고려

소프트웨어 디자인은 사용자 경험을 고려해야 합니다. 사용자가 쉽게 사용하고 이해할 수 있도록 직관적인 인터페이스와 효과적인 작업 흐름을 제공해야 합니다.

profile
프론트엔드 개발자를 꿈꾸는 고등학생입니다⌨️💻

0개의 댓글