일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 3D프린터
- nas
- Token인증방식
- github
- 네이버클라우드
- octoprint
- Kotlin
- 데이터 직렬화 포맷
- 3D 프린터 용어
- docker
- git
- 3d프린터 초보
- kubernetes
- gitlab
- Jenkins
- Notification
- 3D프린터입문
- ci/cd
- 3D프린터 입문
- data serialization formats
- IoTNetwork
- OnlineIDE
- 코틀린개발환경
- 3D
- linux job
- 리눅스 파일동기화
- C언어
- NAS HDD교체
- docker container
- 3D모델링
- Today
- Total
0과 1을 공부하다.
[C++] 구조체와 클래스 (Struct, Class) 본문
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.
'Study > C, C++' 카테고리의 다른 글
[C] C언어 키워드(Keyword) 정리 (0) | 2021.10.06 |
---|---|
[C] 헤더파일과 프로그램 모듈화 (0) | 2021.09.15 |