[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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바