객체지향 개괄

Jaemyeong Lee·2024년 8월 10일
0

FastCampusC++

목록 보기
51/78

이 코드 예제는 객체지향 프로그래밍과 절차지향 프로그래밍 스타일의 차이를 설명하는 데 도움이 됩니다. 코드의 각 부분과 해당 주석을 자세히 분석하여 설명해 보겠습니다.

객체지향 스타일 (C++ 스타일)

// C++ 스타일
string s0 = "hello";
string s1 = "world";
s0.append(s1); // 객체 s0의 함수 append 사용
s0 += s1; // 객체 s0와 s1의 관계를 알 수 있음

cout << s0 << endl;

코드 분석:

  1. string s0 = "hello";

    • 설명: std::string 클래스는 C++ 표준 라이브러리에서 제공하는 문자열 클래스입니다. 이 코드는 "hello"라는 문자열로 초기화된 s0이라는 std::string 객체를 생성합니다.
    • 주석: s0이라는 객체가 생성되며, 이는 문자열을 다루는 객체입니다. C++에서는 std::string 클래스를 사용하여 문자열을 처리할 수 있습니다.
  2. string s1 = "world";

    • 설명: "world"라는 문자열로 초기화된 또 다른 std::string 객체인 s1이 생성됩니다.
    • 주석: s1이라는 또 다른 std::string 객체가 생성됩니다. 두 객체(s0s1)는 독립적인 상태를 가지고 있으며, 서로의 영향을 받지 않고도 조작될 수 있습니다.
  3. s0.append(s1);

    • 설명: appendstd::string 클래스의 멤버 함수로, 현재 객체(s0)의 끝에 다른 문자열 객체(s1)를 추가합니다. 이 연산은 s0 객체의 내부 상태를 변경합니다.
    • 주석: s0 객체는 append 메서드를 통해 s1 객체의 문자열을 자신의 문자열 끝에 추가합니다. 이는 s0 객체의 상태를 변경하는 함수 호출입니다.
  4. s0 += s1;

    • 설명: += 연산자는 std::string 클래스에서 오버로딩된 연산자로, s0s1의 문자열을 추가합니다. 이 연산도 s0의 내부 상태를 변경합니다.
    • 주석: += 연산자를 통해 s0 객체에 s1 객체의 문자열이 더해집니다. 이는 객체 간의 관계를 표현하는 자연스러운 방식이며, s0의 상태를 변경합니다.
  5. cout << s0 << endl;

    • 설명: 최종적으로, s0의 값을 표준 출력 스트림에 출력합니다. endl은 줄 바꿈을 의미합니다.
    • 주석: 최종 결과로 s0 객체의 문자열이 출력됩니다. 이 예제에서는 s0에 "helloworldworld"가 출력됩니다. 이는 append+= 연산으로 인해 s0에 두 번 s1이 추가되었기 때문입니다.

절차지향 스타일 (C 스타일)

// C 스타일
char s2[100] = "hello"; // 내부 구현이 드러남(배열)
char s3[] = "world";

strcat(s2, s3);
cout << s2 << endl;

코드 분석:

  1. char s2[100] = "hello";

    • 설명: s2는 크기 100의 문자 배열로, "hello"라는 문자열로 초기화됩니다. C 스타일의 문자열은 배열을 사용하여 구현됩니다.
    • 주석: s2는 크기 100의 문자 배열로 선언되었으며, 초기 값으로 "hello"가 할당됩니다. 배열은 C 스타일의 문자열 표현 방식으로, 이로 인해 내부 구현이 드러납니다.
  2. char s3[] = "world";

    • 설명: s3는 "world"라는 문자열로 초기화된 문자 배열입니다. 배열의 크기는 초기화에 따라 자동으로 설정됩니다.
    • 주석: s3는 "world" 문자열로 초기화된 문자 배열입니다. 배열의 크기는 문자열의 길이에 따라 자동으로 결정됩니다.
  3. strcat(s2, s3);

    • 설명: strcat 함수는 C 표준 라이브러리 함수로, s2 배열의 끝에 s3 배열의 문자열을 추가합니다. 이 함수는 s2의 내부 상태를 변경합니다.
    • 주석: strcat 함수는 s2 배열에 s3 배열의 문자열을 붙입니다. 이 과정에서 s2의 크기를 고려해야 하며, 배열이 초과되지 않도록 주의해야 합니다.
  4. cout << s2 << endl;

    • 설명: 최종적으로, s2의 값을 표준 출력 스트림에 출력합니다.
    • 주석: 최종 결과로 s2 배열의 문자열이 출력됩니다. 이 예제에서는 s2에 "helloworld"가 출력됩니다. strcat 함수에 의해 s3의 문자열이 s2에 추가되었기 때문입니다.

객체지향 vs 절차지향의 차이

  1. 추상화 수준:

    • C++ 스타일은 std::string 객체를 사용하여 문자열을 관리하며, 이는 고수준의 추상화를 제공합니다. 메모리 관리와 같은 세부 사항은 대부분 감춰져 있습니다.
    • C 스타일은 문자 배열을 사용하여 문자열을 관리하며, 이로 인해 메모리 크기와 같은 저수준 세부 사항을 직접 관리해야 합니다.
  2. 안전성 및 편의성:

    • std::string 클래스는 범위 초과와 같은 오류로부터 더 안전하며, 문자열 연산이 더 직관적입니다.
    • C 스타일에서는 배열의 크기를 초과하지 않도록 주의해야 하며, 수동으로 메모리를 관리해야 하므로 오류 가능성이 높습니다.
  3. 유지보수 및 가독성:

    • 객체지향 스타일은 유지보수와 코드 재사용 측면에서 유리합니다. 코드가 직관적이고, 객체 간의 관계가 명확합니다.
    • 절차지향 스타일은 간결하고 직접적이지만, 복잡한 프로그램에서는 관리가 어려워질 수 있습니다.
profile
李家네_공부방

0개의 댓글