본문 바로가기

- Programming/- 개념 잡기

★ 16. c++/c# 구조체와 클래스의 차이

반응형

c++/c# 구조체와 클래스의 차이


===================================================

- c++ -


struct는 default가 public이다.

값을 직접 참조할 때 사용함

선언과 동시에 사용 가능


예) vector a

     a.x = 10;


class는 default가 private이다.

주로 멤버 변수를 직접 건들지 않고 함수로 건드림


둘 다 private public protected 변수, 메서드 선언 다 가능하다.

(차이가 거의 없음)


c++ 구조체란?

다양한 형의 자료를(변수를) 하나로 통합한다. 또한 필요에 따라 메소드를 사용할 수 있다.

접근 제한 연산자를 사용할 수 있으며, 사용하지 않을 경우 기본적으로 public 접근자가 사용됨.


c++ 클래스란?

다양한 형의 자료와, 함수(메소드)를 하나의 객체로 통합하는데 사용할 수 있다.

접근 제한 연산자를 사용할 수 있으며, 사용하지 않을 경우 기본적으로 private 접근자가 사용된다.


클래스에 대한 멤버 함수는 일반 함수들이 오버로드될 수 있는 것처럼 오버로드될 수 있으며,

클래스를 사용하고자 하는 타인이 오직 인터페이스(interface or public methods)만 알고, 내부 구현이 어떻게 이루어져있는지 알 필요가 없도록 인터페이스와 구현부를 각각 분할해 사용해야 한다. (OOP - 캡슐화 / 추상화)


===================================================

- c# -


c++에서 구조체는 default가 public, 클래스는 private지만 c#에선 둘다 기본이 private이다.
클래스는 항상 힙 영역에 생성되지만 구조체는 항상 스택에 생성되는 것이 아니고 new를 해야 힙에 생성함.

클래스는 항상 참조 타입이며 구조체는 값 타입이다.
구조체는 가비지 대상이 아니다.
용량이 작고 임시적으로 쓰는 데이터는 구조체로 만드는 것이 효과적이다.
다른 구조체 상속은 안되지만 인터페이스는 상속이 가능하다.

클래스는 참조 자료형 (cpp의 포인터 느낌)
힙에 할당된 인스턴스를 참조하는 방식
클래스 간의 대입시 참조 값이 대입됨

===================================================

c#같은 경우 알아보던 도중 한 커뮤니티에서 이게 틀리다 저게 틀리다 등등
논란이 많았지만 최대한 신뢰가 가는 정보라고 생각되는 것만 적어보았습니다.


반응형

'- Programming > - 개념 잡기' 카테고리의 다른 글

★ 18. SocketAsyncEventArgs 클래스  (0) 2017.02.25
★ 17. 가비지 (Garbage)  (0) 2017.02.08
★ 15. C# Lock 키워드  (0) 2017.02.07
★ 14. 액세스 한정자  (0) 2017.02.07
★ 13. 댕글링 포인터  (0) 2016.07.20