0118 정보처리기사 필기 (5/N): 2과목 - 포인터와 객체 지향(OOP)
✅ 1. 포인터 (Pointer) - (C언어 기준)
- 포인터란 다른 변수의 메모리 주소(Address)를 값으로 가지는 특별한 종류의 변수입니다.
- 포인터를 사용하면 메모리에 직접 접근하여 데이터를 조작할 수 있어, 저수준의 정교한 프로그래밍이 가능합니다.
➕ 포인터 관련 주요 연산자
| 연산자 | 이름 | 설명 | 예시 |
|---|
& | 주소 연산자 | 변수 앞에 붙여, 해당 변수의 메모리 주소를 구해옵니다. | &num (변수 num의 주소) |
* | 참조 연산자 (역참조 연산자) | 포인터 변수 앞에 붙여, 해당 포인터가 가리키는 주소에 있는 실제 값을 가져옵니다. | *p (포인터 p가 가리키는 곳의 값) |
➕ 포인터의 선언 및 사용
#include <stdio.h>
int main() {
int num = 10;
int* p;
p = #
printf("변수 num의 값: %d\n", num);
printf("변수 num의 주소: %p\n", &num);
printf("포인터 p의 값: %p\n", p);
printf("포인터 p가 가리키는 값: %d\n", *p);
*p = 20;
printf("값 변경 후 num의 값: %d\n", num);
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대 특징은 캡슐화(정보 은닉), 상속(재사용), 다형성(다양한 형태), 추상화(핵심 모델링)이며, 이들을 통해 유연하고 유지보수하기 좋은 소프트웨어를 만들 수 있습니다.