TIL - 20260118

juni·2026년 1월 18일

TIL

목록 보기
242/316

0118 정보처리기사 필기 (5/N): 2과목 - 포인터와 객체 지향(OOP)


✅ 1. 포인터 (Pointer) - (C언어 기준)

  • 포인터란 다른 변수의 메모리 주소(Address)를 값으로 가지는 특별한 종류의 변수입니다.
  • 포인터를 사용하면 메모리에 직접 접근하여 데이터를 조작할 수 있어, 저수준의 정교한 프로그래밍이 가능합니다.

➕ 포인터 관련 주요 연산자

연산자이름설명예시
&주소 연산자변수 앞에 붙여, 해당 변수의 메모리 주소를 구해옵니다.&num (변수 num의 주소)
*참조 연산자
(역참조 연산자)
포인터 변수 앞에 붙여, 해당 포인터가 가리키는 주소에 있는 실제 값을 가져옵니다.*p (포인터 p가 가리키는 곳의 값)

➕ 포인터의 선언 및 사용

#include <stdio.h>

int main() {
    int num = 10; // 1. 정수형 변수 num 선언, 값은 10

    // 2. 포인터 변수 p 선언
    // int* p; 는 "p는 int 타입 변수의 주소를 저장하는 포인터다" 라는 의미
    int* p;

    // 3. 포인터에 주소 할당
    p = &num; // p는 변수 num의 메모리 주소를 가리키게 됨

    printf("변수 num의 값: %d\n", num); // 출력: 10
    printf("변수 num의 주소: %p\n", &num); // 출력: num의 메모리 주소 (예: 0x7ffeeabc)
    printf("포인터 p의 값: %p\n", p); // 출력: num의 메모리 주소 (p는 주소를 값으로 가짐)
    printf("포인터 p가 가리키는 값: %d\n", *p); // 출력: 10 (p가 가리키는 곳의 실제 값)

    // 포인터를 이용한 값 변경
    *p = 20; // p가 가리키는 곳의 값을 20으로 변경 (결과적으로 num의 값이 20으로 바뀜)
    printf("값 변경 후 num의 값: %d\n", num); // 출력: 20

    return 0;
}

✅ 2. 객체 지향 프로그래밍 (Object-Oriented Programming, OOP)

  • OOP는 현실 세계의 사물이나 개념을 "객체(Object)"로 모델링하고, 이 객체들 간의 상호작용을 통해 프로그램을 설계하는 방식입니다. 코드의 재사용성을 높이고, 유지보수를 용이하게 만드는 것이 주 목적입니다.

➕ 2-1. 클래스(Class)와 객체(Object)

  • 클래스 (Class): 객체를 만들어내기 위한 설계도 또는 템플릿. 객체가 가질 속성(상태)행위(동작)를 정의합니다.
  • 객체 (Object): 클래스라는 설계도를 바탕으로, 메모리에 실제로 구현된 실체. 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(Instance)라고 합니다.
    • 속성 (Attribute): 객체의 상태를 나타내는 데이터. (멤버 변수, 필드)
    • 메서드 (Method): 객체의 동작을 나타내는 함수.

➕ 2-2. 생성자(Constructor)와 소멸자(Destructor)

  • 생성자: 객체가 생성될 때 자동으로 호출되어, 객체의 속성을 초기화하는 역할을 하는 특별한 메서드. 클래스 이름과 동일한 이름을 가집니다.
  • 소멸자: 객체가 소멸될 때 자동으로 호출되어, 객체가 사용하던 자원을 해제하는 역할을 하는 메서드. (C++에 존재, Java는 가비지 컬렉터가 유사한 역할 수행)

✅ 3. OOP의 4대 핵심 특징

➕ 3-1. 캡슐화 (Encapsulation)

  • 개념: 관련된 데이터(속성)와 기능(메서드)을 하나의 클래스로 묶고, 외부에서 데이터에 직접 접근하는 것을 막아 정보를 은닉(Information Hiding)하는 것입니다.
  • 구현: 멤버 변수는 private으로, 외부에서 접근해야 할 메서드는 public으로 선언하여 구현합니다.

➕ 3-2. 상속 (Inheritance)

  • 개념: 기존의 클래스(부모/슈퍼 클래스)를 재사용하여, 그 속성과 메서드를 물려받는 새로운 클래스(자식/서브 클래스)를 만드는 것입니다. (extends 키워드 사용)
  • 장점: 코드의 중복을 줄이고, 클래스 간의 계층 구조를 형성하여 프로그램을 체계적으로 구성할 수 있습니다.

➕ 3-3. 다형성 (Polymorphism)

  • 개념: "여러 가지 형태를 가질 수 있는 능력". 하나의 메시지(메서드 호출)에 대해, 객체의 실제 타입에 따라 서로 다른 동작을 하는 것을 의미합니다.
  • 주요 구현 방법:
    • 오버로딩 (Overloading): 하나의 클래스 내에서 같은 이름의 메서드를 여러 개 정의하는 것. (단, 매개변수의 개수나 타입이 달라야 함)
    • 오버라이딩 (Overriding): 상속 관계에서, 자식 클래스가 부모 클래스로부터 물려받은 메서드를 자신에게 맞게 재정의하는 것.

➕ 3-4. 추상화 (Abstraction)

  • 개념: 객체들의 공통적인 속성과 기능을 추출하여 추상적인 개념으로 정의하는 것입니다. 불필요한 세부 사항은 숨기고, 핵심적인 부분만 드러내는 과정입니다.
  • 구현: 추상 클래스(Abstract Class)인터페이스(Interface)를 통해 구현됩니다.

📌 요약

  • 포인터는 변수의 메모리 주소를 저장하는 변수로, & 연산자로 주소를 얻고, * 연산자로 해당 주소의 실제 값에 접근합니다.
  • 객체 지향 프로그래밍(OOP)은 현실 세계를 객체 단위로 모델링하는 프로그래밍 패러다임입니다.
  • 클래스는 객체의 설계도, 객체는 그 설계도로 만들어진 실체(인스턴스)입니다.
  • OOP의 4대 특징은 캡슐화(정보 은닉), 상속(재사용), 다형성(다양한 형태), 추상화(핵심 모델링)이며, 이들을 통해 유연하고 유지보수하기 좋은 소프트웨어를 만들 수 있습니다.

0개의 댓글