[C++] 구조체와 클래스 (Struct, Class)

2021. 9. 29. 17:13·Language/C, C++
728x90

C언어에서 C++로 입문하면 구조체와 클래스의 유사성 때문에 혼란이 온다. 

본 게시글에서는 구조체와 클래스의 대해 알아보고 차이점에 대해 알아본다.

구조체(struct)

추상화를 이용해 사용자 정의 자료향을 만드는 것.

struct Car
{
	int Oil; // 연료의 잔량을 나타냄
	int Speed; // 현재 차의 속력을 나타냄
    
	void Accelerator();
	void Break();
	void Mission();
};

C언어 프로그래밍을 통해 배웠던 위 코드는 자동차의 요소와 기능을 묶어 선언한 구조체이다.

자동차에 많은 요소들이 있겠지만 연료, 속도, 엑셀, 브레이크, 기어변속 등 이처럼 연관성 있는 것들끼리 묶으면 구현 및 유지보수가 유리해진다. 

 

클래스(class)

객체를 사실적으로 표현하지 않고 공통된 특징을 간결하게 표현하는 것.

class Car
{
	int Oil; // 연료의 잔량을 나타냄
	int Speed; // 현재 차의 속력을 나타냄
    
	void Accelerator();
	void Break();
	void Mission();
};

위 코드는 앞서 설명한 구조체와 동일하게 클래스로 자동차의 요소들을 구현 한 것이다. 구조체와 동일하게 접근지정자는 생략하였다. 

 

언뜻보기에는 선언 키워드만 다르고 매우 유사해보인다. 구조체도 클래스와 동일하게 상속, enum 상수 선언, 변/함수 선언, 오버로딩, 접근제어자를 통한 정보은닉이 가능하다. 

 

둘 사이에 다른점이 있다면 구조체는 별도의 접근제어자가 없다면 모든 변수 및 함수가 Public으로 선언되고 클래스는 는 별도의 지정이 없으면 Private으로 선언된다는 특징이 있다.

 

앞서 본 것 처럼 클래스는 C언어에서 배웠던 구조체와 유사한 특징을 가지고 있다. 그렇다면 대표적인 절차지향 언어인 C언어도 객체지향 언어야 ? 라는 의문이 들 수 있다. 이해하기 이전에 절차지향 언어의 특징과 객체지향언어의 특징을 이해 할 필요가 있다. 

 

절차지향 언어는 (Procedural Programming)

공을 하늘에 던지면 위에서 아래로 떨어지는 것처럼 순차적 처리 (Top-Down)가 중요시 되는 특징을 지니고 있다. 

순차적으로 처리하기 때문에 컴퓨터의 자료처리 구조와 유사해 성능적인 부분에서 유리하지만 유지보수가 어렵고 디버깅이 어럽다는 단점이 있다.

 

반면에 객체지향 언어는 (Object Oriented Programming)

말 그대로 객체를 지향하는 언어로 자동차 부품을 하나씩 조립하는 것처럼 데이터와 코드를 유사성 있게 묶어 코드의 재사용성과 객체간의 관계 및 조직에 초점을 둔 언어이다. 각 객체간의 관계에 따라 프로그램이 실행되기 때문에 Bottom-Up형태로 실행된다. 객체지향의 핵심적인 특징으로 상속성(Inheritance), 추상화(Abstraction), 캡슐화(Encapsulation), 다형성(Polymorphism)이 있다.

 

즉 C언어도 구조체를 통해 객체지향과 유사하게 프로그래밍을 할 수 있지만, 실행방식에서 절차적인 방식과 추구하는 형태(함수, 객체)의 차이가 있으므로 절차지향 언어로 볼 수 있다. 

 

위의 내용을 조합하였을 때 절차지향과 객체지향은 실행 방식의 차이점이 있음을 알 수 있고 구조체와 클래스의 차이는 디폴트 접근제어자와 선언방식의 차이정도로만 알 수 있었다. 둘 차이를 보았을 때 매우 유사하지만 암묵적으로 Public 형태의 변/함수만 사용하면 구조체, 그렇지 않으면 클래스를 사용하는 것이 좋다. 

 

 

 

* CopyRight 2021. Jay Park All rights reserved.

728x90
저작자표시 비영리 변경금지 (새창열림)

'Language > C, C++' 카테고리의 다른 글

[C] C언어 키워드(Keyword) 정리  (0) 2021.10.06
[C] 헤더파일과 프로그램 모듈화  (0) 2021.09.15
'Language/C, C++' 카테고리의 다른 글
  • [C] C언어 키워드(Keyword) 정리
  • [C] 헤더파일과 프로그램 모듈화
dev.parkjh
dev.parkjh
Jay Blog. Github: https://github.com/GreatPark96
  • dev.parkjh
    0과 1을 공부하다.
    dev.parkjh
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • Profile (2)
      • Paper (6)
      • Column (3)
      • Project (8)
        • Smart Home (3)
        • 3D Printing (5)
      • Front-End (0)
        • Web (3)
      • Back-End (8)
        • API (1)
        • DB (1)
        • Laravel (4)
      • Language (16)
        • Kotlin (11)
        • C, C++ (3)
        • JAVA (0)
        • python (2)
      • System (28)
        • Server (15)
        • Security (1)
        • Network (1)
        • Linux (8)
        • Cloud (3)
      • ETC (34)
        • Book Recommend (Computer) (3)
        • IoT (7)
        • BlockChain (7)
        • ETC (17)
      • My YOLO (1)
      • Note (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    3D
    docker
    3D프린터 입문
    리눅스 파일동기화
    Jenkins
    ci/cd
    git
    네이버클라우드
    docker container
    C언어
    Database
    Kotlin
    work hour
    코틀린개발환경
    3d프린터 초보
    데이터 직렬화 포맷
    linux job
    gitlab
    ai code review
    NAS HDD교체
    ncp container registry
    Notification
    docker private register
    coderabbit
    nas
    kubernetes
    3D프린터
    data serialization formats
    github
    3D모델링
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dev.parkjh
[C++] 구조체와 클래스 (Struct, Class)
상단으로

티스토리툴바