반응형
1. Class의 개요
1.1 Class의 정의
Class는 객체를 생성하기 위한 설계도(Template) 이다. 객체의 속성(Attribute) 과 행위(Method) 를 정의한다.
| 구성요소 | 설명 | 예시 |
| Attribute | 객체의 상태를 표현하는 데이터 | name, age |
| Method | 객체의 동작을 정의 | getName(), move() |
| Constructor | 객체 생성 시 초기화 | Person() |
| Access Modifier | 접근 제어 | public, private |
개념 구조

1.2 Class UML 표현
UML에서는 3단 구조로 표현한다.

접근자의 의미
| 기호 | 의미 |
| + | public |
| - | private |
| # | protected |
| ~ | package |
1.3 Class의 일반화와 상속성
일반화 (Generalization)
여러 클래스의 공통 특성을 상위 클래스에 정의하는 것
예

공통 속성
- name
- age
- eat()
상속 (Inheritance)
기존 클래스의 속성과 메소드를 재사용하는 메커니즘
| 특징 | 설명 |
| 코드 재사용 | 공통 기능 재사용 |
| 확장성 | 기능 확장 가능 |
| 유지보수 | 변경 영향 최소화 |
1.4 일반화 및 상속 UML 표현

2. 개발 언어별 Class / Method 비교
2.1 Class 비교 및 인수 전달 방식
| 언어 | Class 지원 | 인수 전달 |
| C | 없음 (struct 사용) | Value |
| C++ | 지원 | Value / Reference |
| Java | 지원 | Value (객체는 reference copy) |
| C# | 지원 | Value / ref / out |
| VB.NET | 지원 | ByVal / ByRef |
| Python | 지원 | Object Reference |
2.2 Method 비교
| 언어 | Method 형태 | 특징 |
| C | 함수 | 클래스 없음 |
| C++ | Member Function | OOP 지원 |
| Java | Instance Method | JVM 기반 |
| C# | Method | .NET |
| VB.NET | Sub / Function | .NET |
| Python | def | 동적 타입 |
2.3 호출 방식
| 방식 | 설명 |
| Call by Value | 값 복사 |
| Call by Reference | 주소 전달 |
| Call by Object Reference | 객체 참조 전달 |
2.4 데이터 타입
| 언어 | 타입 |
| C | 정적 타입 |
| C++ | 정적 타입 |
| Java | 정적 타입 |
| C# | 정적 타입 |
| VB.NET | 정적 타입 |
| Python | 동적 타입 |
2.5 호출측 변경
| 전달 방식 | 호출자 영향 |
| Value | 변경 없음 |
| Reference | 변경 가능 |
3. 개발 언어별 Class / Method 예제
3.1 C 언어 예제
C는 OOP가 없으므로 struct + 함수 사용
#include <stdio.h>
typedef struct {
char name[50];
int age;
} Person;
void printPerson(Person p) {
printf("Name: %s\n", p.name);
printf("Age: %d\n", p.age);
}
int main() {
Person p = {"Tom", 20};
printPerson(p);
}
3.2 C++ 예제
#include <iostream>
using namespace std;
class Person {
private:
string name;
int age;
public:
Person(string n, int a) {
name = n;
age = a;
}
void print() {
cout << name << " " << age << endl;
}
};
int main() {
Person p("Tom",20);
p.print();
}
3.3 Java 예제
class Person {
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public void print(){
System.out.println(name + " " + age);
}
public static void main(String[] args){
Person p = new Person("Tom",20);
p.print();
}
}
3.4 C# 예제
using System;
class Person
{
private string name;
private int age;
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
public void Print()
{
Console.WriteLine(name + " " + age);
}
}
class Program
{
static void Main()
{
Person p = new Person("Tom",20);
p.Print();
}
}
3.5 VB.NET 예제
Public Class Person
Private name As String
Private age As Integer
Public Sub New(n As String, a As Integer)
name = n
age = a
End Sub
Public Sub Print()
Console.WriteLine(name & " " & age)
End Sub
End Class
3.6 Python 예제
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def print(self):
print(self.name, self.age)
p = Person("Tom",20)
p.print()
4. Class 사이의 관계 (종속 / 연관)
객체지향 설계에서 클래스 관계는 다음과 같다.
| 관계 | 설명 |
| Association | 일반 연관 |
| Dependency | 종속 |
| Aggregation | 집합 |
| Composition | 합성 |
| Inheritance | 상속 |
UML 관계 도식

5. 개발 언어별 변수 선언 및 접근자
5.1 접근자의 개요
Access Modifier는 클래스 멤버 접근 범위를 제한한다.
목적
- 캡슐화
- 보안
- 유지보수성
5.2 개발 언어별 변수 선언 비교
| 언어 | 변수 선언 |
| C | int age; |
| C++ | int age; |
| Java | private int age; |
| C# | private int age; |
| VB.NET | Private age As Integer |
| Python | self.age |
5.3 개발 언어별 접근자 비교
| 접근자 | Java | C# | VB.NET | C++ | Python |
| public | O | O | Public | O | 기본 |
| private | O | O | Private | O | _ |
| protected | O | O | Protected | O | _ |
| internal | X | O | Friend | X | X |
전체 구조 요약

참고 문헌
- Grady Booch, Object-Oriented Analysis and Design
- Erich Gamma, Design Patterns
- OMG, UML Specification
- Robert C. Martin, Clean Architecture
반응형
'개발 > OOP' 카테고리의 다른 글
| 객체지향(OOP)의 Interface (0) | 2026.03.17 |
|---|