Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

공부해보잠

객체지향(Object-Oriented) 본문

자격증/정보처리

객체지향(Object-Oriented)

heejk 2025. 1. 29. 22:31
객체지향 개요 (Object-Oriented Overview)

객체지향은 현실 세계의 개체(Entity)를 객체(Object)로 만들어 조립하는 방식으로 소프트웨어를 개발하는 기법입니다. 마치 기계 부품을 조립하여 제품을 제작하듯이 객체를 조립하여 프로그램을 구성합니다.

 

특징

  • 구조적 기법의 문제점을 해결하기 위해 도입된 패러다임
  • 재사용성과 확장성이 뛰어나 유지보수가 용이하고, 고품질의 소프트웨어 개발이 가능
  • 복잡한 시스템을 단계적 계층 구조로 표현하여 이해하기 쉬움
  • 멀티미디어 데이터 처리 및 병렬 처리 지원
  • 현실 세계를 모형화하여 사용자와 개발자가 쉽게 이해 가능

객체지향의 주요 구성 요소 및 개념

  • 객체(Object) : 독립적으로 존재하며 속성과 동작을 가짐
  • 클래스(Class) : 동일한 속성과 동작을 갖는 객체들의 집합
  • 캡슐화(Encapsulation) : 데이터와 기능을 하나로 묶어 외부에서 접근을 제한
  • 상속(Inheritance) : 기존 클래스를 확장하여 새로운 클래스를 생성
  • 다형성(Polymorphism) : 동일한 인터페이스로 다양한 동작 수행
  • 연관성(Association) : 객체 간의 관계를 정의

부가 설명

  • 현실 세계의 객체(Object in Real World)
    → 사람이 인식할 수 있는 모든 사물(예: 자동차, 동물, 책)은 속성과 행동을 가짐
  • 구조적 기법 (Procedural Programming)
    → 프로그램을 데이터와 함수(절차) 중심으로 구성하여 순차적으로 실행하는 방식
  • 구조적 기법의 문제점
    • 프로그램의 규모가 커질수록 유지보수가 어려움
    • 데이터와 기능이 분리되어 있어 재사용성이 낮음
    • 새로운 기능 추가 시 기존 코드 변경이 많아 확장성이 부족
    • 현실 세계를 그대로 표현하기 어려워 개발자의 이해도가 낮음

객체(Object)

데이터와 데이터를 처리하는 함수를 **하나의 단위(캡슐화)**로 묶어 놓은 소프트웨어 모듈.

 

객체의 구성 요소

데이터:

  • 객체가 가지고 있는 정보(속성, 상태, 분류)
  • 속성(Attribute), 상태(State), 변수(Variable), 자료 구조(Data Structure) 등으로 표현

함수:

  • 객체가 수행하는 기능(알고리즘, 동작)
  • 속성이나 상태를 참조·변경하는 역할
  • 메소드(Method), 서비스(Service), 동작(Operation), 연산(Function) 등으로 불림

객체의 특성

  • 고유성: 객체는 **독립적인 식별자(이름)**를 가진다.
  • 상태(State): 객체가 가질 수 있는 속성 값이며, 시간에 따라 변할 수 있다.
  • 연관성(Relationships): 객체는 다른 객체와 관계를 가질 수 있다.
  • 행위(Behavior):
    • 객체는 메시지(Message)를 받아서 특정 동작을 수행한다.
    • 메시지 집합이 곧 객체의 행위(Behavior).
  • 기억 장소(Memory): 객체는 자체적으로 데이터를 저장할 수 있는 공간을 가진다.

부가설명

 

메시지(Message)와 메소드(Method)의 관계

  • 메시지: 객체가 다른 객체와 통신하는 방법 (ex. "문 열어!")
  • 메소드: 메시지를 받았을 때 실행되는 기능 (ex. "문을 연다")

 객체는 메시지를 받고, 메소드로 응답한다.


클래스(Class)

공통된 속성(Attribute)과 연산(Operation)을 갖는 객체의 집합으로, 객체의 일반적인 타입(Type)을 의미.

 

특징

 

객체의 틀(Template)

  • 객체들이 갖는 공통 속성과 연산(행위)을 정의하는 역할.

추상화의 단위

  • 클래스는 객체지향 프로그램에서 데이터를 추상화하는 단위로 사용됨.

인스턴스화(Instantiation)

  • 클래스로부터 새로운 객체를 생성하는 과정.
  • 생성된 객체를 인스턴스(Instance)라고 부름.

객체 간의 차이점과 공통점

  • 동일 클래스에 속한 객체들은 공통된 속성과 행위를 공유하지만,
  • 각 객체의 속성 값은 다를 수 있음.

최상위 클래스(Top-Level Class)

  • 상위(부모) 클래스가 없는 클래스를 의미.
  • 모든 클래스의 최상위에는 일반적으로 Object 클래스가 존재함(Java 기준).

클래스의 종류

클래스 종류 설명
슈퍼 클래스(Super Class) 특정 클래스의 상위(부모) 클래스
서브 클래스(Sub Class) 특정 클래스의 하위(자식) 클래스 (슈퍼 클래스를 상속받음)
추상 클래스(Abstract Class) 구체적인 기능 없이 공통적인 특징만을 정의한 클래스
구체 클래스(Concrete Class) 인스턴스 생성이 가능한 일반적인 클래스 (추상 클래스와 구분)

 

부가 설명

 

추상 클래스와 구체 클래스의 차이

  • 추상 클래스는 인스턴스를 만들 수 없음 → 구체 클래스가 상속받아 구체화해야 사용 가능
  • 구체 클래스는 직접 인스턴스를 생성할 수 있음

클래스와 객체의 관계

  • 클래스(Class) = 설계도(Blueprint)
  • 객체(Object) = 설계도를 기반으로 생성된 실체(Instance)

캡슐화(Encapsulation)

데이터(속성)와 데이터를 처리하는 함수(메서드)를 하나로 묶는 것을 의미.

 

특징

 

정보 은닉(Information Hiding)

  • 캡슐화된 객체는 내부 구현을 숨기고 인터페이스만 공개하여, 외부에서 접근을 제한함.
  • 이를 통해 외부 모듈의 변경이 내부에 미치는 영향을 최소화(파급 효과 감소).

재사용성이 높음

  • 객체의 내부 로직을 감춘 채 재사용이 가능하여 유지보수가 쉬움.

인터페이스 단순화

  • 객체 간 메시지 교환 시, 내부 구현을 몰라도 사용 가능하여 복잡성을 낮출 수 있음.

결합도(Coupling) 감소

  • 객체 간 의존성이 낮아져 변경에 유연하게 대응할 수 있음.

상속(Inheritance)

이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스(자식 클래스)가 물려받는 개념.

 

특징

  • 코드의 재사용(Reuse) 가능
    • 하위 클래스는 상위 클래스의 속성과 연산을 다시 정의하지 않고도 즉시 사용 가능.
  • 기능 확장 가능
    • 하위 클래스는 상위 클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 추가할 수 있음.
  • 유지보수성 향상
    • 상위 클래스만 수정하면 하위 클래스에도 자동 반영되어 유지보수가 편리함.
  • 객체 간 계층 구조 형성
    • 상속을 통해 객체 간 계층적 관계를 만들 수 있어 구조적인 설계 가능.

 

다중 상속(Multiple Inheritance)

  • 한 개의 클래스가 두 개 이상의 상위 클래스로부터 속성과 연산을 상속받는 것.
  • 일부 프로그래밍 언어(Java 등)에서는 다중 상속을 직접 지원하지 않으며, 인터페이스로 구현 가능.

다형성(Polymorphism)

메시지에 의해 객체(클래스)가 연산을 수행할 때, 같은 메시지라도 객체(클래스)에 따라 서로 다른 방식으로 실행되는 능력을 의미합니다.

 

특징

 

같은 메소드명으로 다양한 동작 수행

  • 객체(클래스)들은 동일한 메소드명을 사용하며, 각 객체(클래스)에 따라 고유한 방식으로 응답합니다.

코드의 재사용성과 유지보수성 향상

  • 하나의 인터페이스로 여러 객체(클래스)를 다룰 수 있어 코드의 유연성이 증가하고 유지보수가 쉬워집니다.

객체 지향 프로그래밍(OOP)에서 중요한 개념

  • 응용 프로그램에서 하나의 함수나 연산자가 서로 다른 클래스의 인스턴스를 동일한 클래스처럼 처리할 수 있도록 지원합니다.

오버로딩(Overloading)과 오버라이딩(Overriding)으로 구현

  • 오버로딩: 같은 이름의 메소드를 매개변수(인자) 개수나 타입을 다르게 정의.
  • 오버라이딩: 상위 클래스의 메소드를 하위 클래스에서 재정의하여 사용하는 방식.

연관성(Relationship)

연관성은 두 개 이상의 객체(클래스)들이 상호 참조하는 관계를 의미합니다.

 

종류 의미 설명 특징
is meber fo 연관화
(Association)
2개 이상의 객체가 상호 관련되어 있음을 의미 객체 간 독립적인 관계를 나타냄
is instance of 분류화
(Classification)
동일한 특성을 갖는 객체들을 모아 구성하는 것 객체들을 공통적인 속성으로 분류
is part of 집단화
(Aggregation)
관련 있는 객체들을 모아 하나의 상위 객체를 구성하는 것 부분(Part)은 전체(Whole)와
독립적으로 존재 가능 (속이 빈 마름모)
is a 일반화
(Generalization)
공통적인 성질들을 추상화한 상위 객체를 구성하는 것 "is-a 관계"를 가지며, 상속 구조를 형성
특수화/ 상세화
(Specialization)
상위 객체를 구체화하여 하위 객체를 구성하는 것 상위 개념을 세부적으로 나누어 구체화

 

출저 및 참고

정보처리 산업기사 기본서(시나공)

728x90

'자격증 > 정보처리' 카테고리의 다른 글

디자인 패턴  (0) 2025.01.30
객체지향 분석 및 설계  (0) 2025.01.29
아키텍처 패턴  (0) 2025.01.29
소프트웨어 아키텍처  (0) 2025.01.28
주요 UML 다이어그램  (0) 2025.01.28