반응형

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

+ Recent posts