클래스를 만들어도 되는 것들을 궂이 구조체로 만들어 사용하는 이유가 뭔지요?
구조체에서 할 수 있는거. 클래스에서도 다 되고,
구조체로 만든다고 메모리 크기가 작은것도 아니구...
연산 속도가 빠르다면, 왜? 빠른지요?
초보적인 질문같지만, 꼬옥 답변 해주셨으면 합니다.
이 쓰레드에서 마치 struct = POD 인 것 처럼이야기 되고 있는데,
이는 사실과 다릅니다.
C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond 에 보면 다음과 같이 POD를 설명합니다.
Quote:
POD stands for “plain old data.” Believe it or not, that’s a technical term in the C++ standard. The standard gives us license to make all kinds of special assumptions about POD types. For example, PODs always occupy contiguous bytes of storage; other types might not. A POD type is defined to be either a scalar, an array of PODs, or a struct or union that has no user-declared constructors, no user-declared copy assignment, no user-declared destructor, no private or protected non-static data members, no base classes, no non-static data members of non-POD, reference, or pointer to member type, or array of such types, and no virtual functions.
제작자의 의도가 무엇일까요 ?
제가 공부한 바로는 struct는 C 의 호환성을 위해서 그대로 둔 것입니다.
그대로 두었다고 했지만 struct는 class 에서 접근 권한을 public으로 선언한 거와 동일하죠.
그래도 호환성에는 문제가 없어서 겠죠.
class 는 "사용자 정의 데이타 형식" 라고 말할 수 있습니다. "사용자 정의 데이타 형식"라고 하면
그 형식은 연산이 되어야 합니다. C 에서는 그것이 불가능하죠. 하지만 C++ 에서는 그 형식에 맞는
연산자를 정의할 수 있죠. 가령 string 이 + 연산자를 제공하는 경우겠지요
연산자를 정의할 수 있다는 것은 C++의 특징중에 하나이지요. 캡슐화, 상속성 등등은 논외로 하겠습니다. ^^
제작자는 초기 자신의 프로젝트에 사용자 정의 데이터를 설계할 수 있을까 라는
의문을 갖게 되고 class 라는 키워드를 사용하게 되었죠. ( 그래서 초기 이름은 C with class 였죠 ? 아마 )
여기에는 스몰톡 같은 순수 객체지향 언어가 많은 도움이 되었죠.
이후 Ada, BCPL 같은 언어의 특징들을 추가하여 C++이 탄생하게 됩니다.
제작자의 의도는 C의 호환성, 효율성, 성능 등을 절대로 놓칠 수가 없었죠. 그래서 C와 완벽히 호환되도록
만들었다고 합니다. 이 중에 bool 도 포함이 되었으며 타입 안정성이 강화 되었죠.
결론은 C++ 에서 struct는 C의 하위 호환성을 위해서 class 에서 접근권한이 모두 public인 경우와
동일하다. 입니다. 그리고 C와 동일하게 작성 될 수 있지만 비추입니다.
C++ 에서는 class 에 private 접근권한을 써야 합니다.. ^^
감사합니다.
C++은 C의 문법을 차용한 것 뿐이고
사실 완벽히 호환되지는 않습니다.
그리고 그게 계획되어 있지도 않고요.
사실 아예 새로운 언어로 만들었으면
더 낫지 않았을까 하는 생각을 합니다.
( 사람들 헷갈리지 않게 .. -_-; )
C++은 멀티패러다임이라는 단어 뒤에서
정말 온갖 것들을 혼동하게 만드는 게 가장 큰 특징같은데요.
이건 개념적인 부분부터 시작해서 실제 코드까지
광범위하게 영향을 주는 것 같습니다. -_-;
class는 사실 OO에서 나온 개념이지
그냥 "사용자 정의 데이터 형식"이라는 개념이 아닙니다.
( 뭐 키워드 이름만 잘못지었다, 하면 할 말이 없습니다만 .. )
C++에서 구현하기를 struct와 거의 같게 구현되었을 뿐이죠.
사실 생각의 과정이 개념->구현, 이 되어야 하는데,
종종 구현->개념, 으로도 가는 게 사람이다보니 -_-a
그걸 통제해줄 뭔가가 필요한데 언어 수준에서는 별로 도와주는 게 없는 셈이죠.
( 에, 언어 수준에서 꼭 뭘 도와줘야 한다는 말은 아닙니다. ;; )
연산자 재정의 같은 건, 뭐 좋아하시는 분들도 많이 있겠지만
역시나 많은 사람들이 같이 코드를 작성하는 경우엔 재앙도 많이 초래합니다.
제가 팀장이라면 아마 절대 이런 feature는 못 쓰게 할 거예요. ;;
팀원들이 전부 C++이라면 꿰고있다, 하는 초고수라면 모를까.
C++에서 사용하고 있는 다중 상속 메카니즘도 솔직히 쓰다보면 우울합니다. -_-
Delphi, Java, C# 라인의 상속을 쓸 때 가지는 마음하고는 아주 다르죠. ;;
Unmanaged 환경에 기반한 Java나 C#와 유사한 언어가 하나쯤 나와줘도 좋을 것 같은데요. (제발)
( Object-C/C++은 어떤지 모르겠긴 하네요 ;; )
C++로 짜다보면 (특히, 멀티패러다임(?)을 가진 팀원들과 코딩하다보면 ..) 온갖 생각이 다 듭니다.
여기까지는 제 방식대로의 이해와 푸념이었고요. ;;
사실 궁금한 게 있어서 답글을 추가하고 있는 것인데요.
C++에서 차용한 Ada나 BCPL의 특징이 뭔지 궁금합니다.
특히 Ada요. ;;
혹시 아시는 부분이 있으면 알려주시면 감사하겠습니다. ;;
Clearly, C++ owes much to C[Kernighan,1978]. [중략] C in turn owes much
to its predecessor BCPL[Richards,1980]; in fact, BCPL's // comment convention
was (re)introduced in C++.
Templates were partly inspired by Ada's generics (both their strengths
and their weaknesses) and partly by Clu's parameterized modules.
Similarly, the C++ exception-handling mechanism was inspired
partly by Ada[Ichbiah,1979], Clu[Liskov,1979], and ML[Wikstrom,1987].
- B. Stroustrup, The C++ Programming Language
여기까진 질문에 대한 답이고
"C++은 C의 문법을 차용한 것 뿐이고
사실 완벽히 호환되지는 않습니다."
이 말씀은 맞지만
"그리고 그게 계획되어 있지도 않고요."
높은 수준의 호환성은 C++을 설계할 때부터 의도한 것이었습니다.
However, great importance was attached to retaining a high degree of compatibility
with C[Koenig,1989][Stroustrup,1994] (Appendix B); this precluded cleaning up the C syntax.
- B. Stroustrup, The C++ Programming Language
C도 계속 변하고 있는 이상 완벽한 호환이라는 것은 가능하지도 않고 의미도 없는 일입니다만
실용적인 의미에서는 C는 C++의 subset이라고 볼 수 있습니다.
그리고 C++이 수정한 C의 문법을 C99에서 채택하기도 했고요.
실제로 TCPL에 실린 예제 코드들은 모두 완벽한 C++ 코드이기도 합니다.
Quote:
사실 아예 새로운 언어로 만들었으면
더 낫지 않았을까 하는 생각을 합니다.
( 사람들 헷갈리지 않게 .. -_-; )
전에 BS의 C++0x에 대한 강의를 동영상으로 본 적이 있는데 청중 가운데 누군가가
비슷한 얘기를 했습니다. 그러자 BS는 "새로운 언어를 완전히 처음부터(from scratch)
만든다는 것은 정말로 힘든 일이다. 그 당시에 C를 기반으로 삼은 것은 타당한
결정이었다."고 대답했습니다. (정확한 문장은 기억하지 못하지만 대략 그런 뜻이었습니다.)
1. 논리적인 데이타 구조는 필요하지만 이것들이 하나의 Object가 될 필요는 없을 때,
다시 말해서 메소드를 가질 필요가 없고, 상속할 필요가 없고 멤버들이 모두 public일 경우
이러한 경우에는 구조체를 사용합니다.
즉, 코딩 시 필요한 기능에 정확히 맞는 기법만을 사용한다는 원칙이 있습니다.
물건을 담는 상자만 필요한데 거기다가 자물쇠 있고 뚜껑있고 서랍이 있는 상자를 만드는 수고는
하지 않는다는 뜻입니다.
딱 정확히 맞는 용도에 맞는 도구를 사용한다고 보면 되겠습니다.
반대로, 생성자안에서 맴버 변수도 초기화 해야 되고, 안에 있는 맴버 변수들을 노출시켜서
그 클래스를 사용하는 개발자들에게 쓸데없는 혼란을 주고 싶지 않고, 기능을 갖고 있는
메소드를 같이 정의하는 것이 타당하고.. 이런 명확한 설계상의 이유가 있을 때는 클래스를
쓰는 것이 타당하겠죠?
컴파일 된 후에는 명백히 구조체가 좀더(매우 미묘하게) 빠르지 않을까 생각합니다.
왜냐하면 구조체변수를 지역 변수로 사용할때는 단지 우리가 일반적으로 여러 지역변수를 사용할때와 같이 stack 에 연속적인 공간으로 사용할텐데
class 를 사용하게되면 정보가 좀 더 필요하거나 추가적으로 처리해야될 것들이 더 있지않나요? 우선 현재 함수의 스택 프레임에는 데이터가 저장되어있는 주소값이 저장되어있고(주소를 여러번 타고 들어가서 실제 값을 찾는지 어쩐지는 모르겠음) 실제 데이터는 현재 함수가 사용하고 있는 스택 공간이 아닌 다른 공간(그게 스택이 될지 아닐지는 잘 모르겠지만 어쨋든 같은공간은 아닐듯) 에 저장될 것 같은데요 ㅎㅎ
댓글
저는 멤버 함수는 필요없고 ctor, dtor 만 있으면 "편리한" 데이
저는 멤버 함수는 필요없고 ctor, dtor 만 있으면 "편리한" 데이터를 표현할때
struct 를 활용합니다..
class C
{
...
struct S
{
S() { p=NULL;}
~S() {if(p) free(p);}
void* p;
};
};
와 같은 식으로요... 꽤 편리하다고 생각합니다만..
이 쓰레드에서 마치 struct = POD 인 것 처럼이야기 되고 있는데
이 쓰레드에서 마치 struct = POD 인 것 처럼이야기 되고 있는데,
이는 사실과 다릅니다.
C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond 에 보면 다음과 같이 POD를 설명합니다.
결국 struct가 항상 POD가 되는건 아닙니다. 위의 조건을 다 지켜야하죠.
--
Passion is like genius; a miracle.
구현이 비슷하다고
구현이 비슷하다고 쓰는 용도도 비슷하다고 생각한다면, EXIT_SUCCESS와 FALSE를 같은 용도로 써도 되는 것이겠죠?
int main() {
...
return FALSE;
}
BOOL isCorrect() {
...
return EXIT_SUCCESS;
}
이 두 개의 함수가 그래도 "제대로"라고 생각하신다면, struct와 class는 별 차이가 없는 것이 맞겠지요.
어떤 "것"을 쓸 때, 프로그래머가 봐야하는 것은 그 "것"의 구현이 아니라 그 "것"의 의미입니다.
struct는 그저 "구조"를 나타내는데 쓰는 것이고, class는 "클래스"를 나타내는데 쓰이는 것일뿐입니다.
struct의 attribute가 struct의 본질이고, member function이 부가정보라면, class는 그 반대로 봐도 무방합니다.
물론, 구조와 클래스가 반드시 이거다 라고 할만큼 딱딱 나누기도 힘들뿐더러, 설령 나누었다고 쳐도, 구조를 나타내는데 class를 쓰면 안된다는 법도 없고, 클래스를 나타내는데 struct를 쓰면 안된다는 법이 없습니다.
EXIT_SUCCESS와 FALSE를 서로 바꿔써도 프로그램이 "아주 잘" 돌아가는 것 처럼 말이죠.
C++ 에서
struct 는 기본 접근 권한이 public 인 class 와 동일하고,
class 는 기본 접근 권한이 private 인 struct 와 동일합니다.
그냥 컨벤션으로 멤버함수가 없고 C에서도 그대로 쓸 수 있는 일차원 메모리 구조는 struct 라고 써 주는거죠. 코드 읽기 편하게요.
임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
Bjarne Stroustrup 의 생각
제작자의 의도가 무엇일까요 ?
제가 공부한 바로는 struct는 C 의 호환성을 위해서 그대로 둔 것입니다.
그대로 두었다고 했지만 struct는 class 에서 접근 권한을 public으로 선언한 거와 동일하죠.
그래도 호환성에는 문제가 없어서 겠죠.
class 는 "사용자 정의 데이타 형식" 라고 말할 수 있습니다. "사용자 정의 데이타 형식"라고 하면
그 형식은 연산이 되어야 합니다. C 에서는 그것이 불가능하죠. 하지만 C++ 에서는 그 형식에 맞는
연산자를 정의할 수 있죠. 가령 string 이 + 연산자를 제공하는 경우겠지요
연산자를 정의할 수 있다는 것은 C++의 특징중에 하나이지요. 캡슐화, 상속성 등등은 논외로 하겠습니다. ^^
제작자는 초기 자신의 프로젝트에 사용자 정의 데이터를 설계할 수 있을까 라는
의문을 갖게 되고 class 라는 키워드를 사용하게 되었죠. ( 그래서 초기 이름은 C with class 였죠 ? 아마 )
여기에는 스몰톡 같은 순수 객체지향 언어가 많은 도움이 되었죠.
이후 Ada, BCPL 같은 언어의 특징들을 추가하여 C++이 탄생하게 됩니다.
제작자의 의도는 C의 호환성, 효율성, 성능 등을 절대로 놓칠 수가 없었죠. 그래서 C와 완벽히 호환되도록
만들었다고 합니다. 이 중에 bool 도 포함이 되었으며 타입 안정성이 강화 되었죠.
결론은 C++ 에서 struct는 C의 하위 호환성을 위해서 class 에서 접근권한이 모두 public인 경우와
동일하다. 입니다. 그리고 C와 동일하게 작성 될 수 있지만 비추입니다.
C++ 에서는 class 에 private 접근권한을 써야 합니다.. ^^
감사합니다.
C++은 C의 문법을
C++은 C의 문법을 차용한 것 뿐이고
사실 완벽히 호환되지는 않습니다.
그리고 그게 계획되어 있지도 않고요.
사실 아예 새로운 언어로 만들었으면
더 낫지 않았을까 하는 생각을 합니다.
( 사람들 헷갈리지 않게 .. -_-; )
C++은 멀티패러다임이라는 단어 뒤에서
정말 온갖 것들을 혼동하게 만드는 게 가장 큰 특징같은데요.
이건 개념적인 부분부터 시작해서 실제 코드까지
광범위하게 영향을 주는 것 같습니다. -_-;
class는 사실 OO에서 나온 개념이지
그냥 "사용자 정의 데이터 형식"이라는 개념이 아닙니다.
( 뭐 키워드 이름만 잘못지었다, 하면 할 말이 없습니다만 .. )
C++에서 구현하기를 struct와 거의 같게 구현되었을 뿐이죠.
사실 생각의 과정이 개념->구현, 이 되어야 하는데,
종종 구현->개념, 으로도 가는 게 사람이다보니 -_-a
그걸 통제해줄 뭔가가 필요한데 언어 수준에서는 별로 도와주는 게 없는 셈이죠.
( 에, 언어 수준에서 꼭 뭘 도와줘야 한다는 말은 아닙니다. ;; )
연산자 재정의 같은 건, 뭐 좋아하시는 분들도 많이 있겠지만
역시나 많은 사람들이 같이 코드를 작성하는 경우엔 재앙도 많이 초래합니다.
제가 팀장이라면 아마 절대 이런 feature는 못 쓰게 할 거예요. ;;
팀원들이 전부 C++이라면 꿰고있다, 하는 초고수라면 모를까.
C++에서 사용하고 있는 다중 상속 메카니즘도 솔직히 쓰다보면 우울합니다. -_-
Delphi, Java, C# 라인의 상속을 쓸 때 가지는 마음하고는 아주 다르죠. ;;
Unmanaged 환경에 기반한 Java나 C#와 유사한 언어가 하나쯤 나와줘도 좋을 것 같은데요. (제발)
( Object-C/C++은 어떤지 모르겠긴 하네요 ;; )
C++로 짜다보면 (특히, 멀티패러다임(?)을 가진 팀원들과 코딩하다보면 ..) 온갖 생각이 다 듭니다.
여기까지는 제 방식대로의 이해와 푸념이었고요. ;;
사실 궁금한 게 있어서 답글을 추가하고 있는 것인데요.
C++에서 차용한 Ada나 BCPL의 특징이 뭔지 궁금합니다.
특히 Ada요. ;;
혹시 아시는 부분이 있으면 알려주시면 감사하겠습니다. ;;
Clearly, C++ owes much to
Clearly, C++ owes much to C[Kernighan,1978]. [중략] C in turn owes much
to its predecessor BCPL[Richards,1980]; in fact, BCPL's // comment convention
was (re)introduced in C++.
Templates were partly inspired by Ada's generics (both their strengths
and their weaknesses) and partly by Clu's parameterized modules.
Similarly, the C++ exception-handling mechanism was inspired
partly by Ada[Ichbiah,1979], Clu[Liskov,1979], and ML[Wikstrom,1987].
- B. Stroustrup, The C++ Programming Language
여기까진 질문에 대한 답이고
"C++은 C의 문법을 차용한 것 뿐이고
사실 완벽히 호환되지는 않습니다."
이 말씀은 맞지만
"그리고 그게 계획되어 있지도 않고요."
높은 수준의 호환성은 C++을 설계할 때부터 의도한 것이었습니다.
However, great importance was attached to retaining a high degree of compatibility
with C[Koenig,1989][Stroustrup,1994] (Appendix B); this precluded cleaning up the C syntax.
- B. Stroustrup, The C++ Programming Language
C도 계속 변하고 있는 이상 완벽한 호환이라는 것은 가능하지도 않고 의미도 없는 일입니다만
실용적인 의미에서는 C는 C++의 subset이라고 볼 수 있습니다.
그리고 C++이 수정한 C의 문법을 C99에서 채택하기도 했고요.
실제로 TCPL에 실린 예제 코드들은 모두 완벽한 C++ 코드이기도 합니다.
전에 BS의 C++0x에 대한 강의를 동영상으로 본 적이 있는데 청중 가운데 누군가가
비슷한 얘기를 했습니다. 그러자 BS는 "새로운 언어를 완전히 처음부터(from scratch)
만든다는 것은 정말로 힘든 일이다. 그 당시에 C를 기반으로 삼은 것은 타당한
결정이었다."고 대답했습니다. (정확한 문장은 기억하지 못하지만 대략 그런 뜻이었습니다.)
답변 감사드립니다.
답변 감사드립니다. ^^a
제가 계획되어 있지 않다고 한 부분은
"완전히 호환하게 한다"라는 것이고요.
높은 호환성에 대해 부정하는 것은 아니었어요.
( 혹시 오해가 있을까봐 덧붙입니다. )
여튼 참고가 많이 되었습니다.
좋은 하루 보내세요. ~
p.s.
여담이지만 개인적으로
BS의 말들은 별로 설득력이 있단 생각이 안들더군요.
제가 비뚤어진건지. -_-;
저도 그렇게
저도 그렇게 생각합니다.
저뿐만이 아니었군요..
댓글이상하게 달라붙는거 같은데..
댓글이상하게 달라붙는거 같은데..
구조체가 클래스보다 좋은 점이라...
이게 맞는지는 모르겠는데요(혹시 제가 혼동하고 있는거면 알려주시길...)
제가 기억하기론 구조체는 대입문 형식의 복사를 할 수 있는데 { A = B; }
클래스는 복사 생성자를 정의해야 되는 걸로 압니다.
구조체는 복사를 할 수가 있다는걸 제일 유용하게 써먹는 경우는
구조체 원소에 배열을 넣은 경우입니다.
배열은 원래 대입문 형식의 복사를 할 수 없죠.
하지만 구조체는 할 수 있기 때문에
구조체의 원소로 배열을 넣고 그 구조체를 복사하면 배열도 간단히 복사가 되는 것이죠.
클래스는... 안 되죠? (갑자기 기억이 가물가물...)
..
이 코드와 디스어셈 코드 기준은 c++ 컴파일러 vc2005입니다.
위의 소스를 보시면 아시겠지만, 클래스도 됩니다. 위의 글에서 계속 언급되었다시피 c++에서 구조체와 클래스는 키워드 구분외에는
사실상 같습니다.
또 다시 언급하지만 클래스도 됩니다.
여기서 저도 질문하나,
b = a같은 경우 c에서는 "byte to byte로 복사한다", c++에서는 "디폴트 복사생성자를 만들어준다."
이것이 제가 알고 있었던 지식입니다. 그러나, 디스어셈 코드를 보니 아니네요?
혹, 컴파일러가 최적화할 수도 있기때문에 코드 최적화에 관련한 모든 옵션은 사용하지 않았습니다.
구조체의 용도
제 개인적으로는 구조체는 아래 두 가지 경우에만 사용합니다.
1. 논리적인 데이타 구조는 필요하지만 이것들이 하나의 Object가 될 필요는 없을 때,
다시 말해서 메소드를 가질 필요가 없고, 상속할 필요가 없고 멤버들이 모두 public일 경우
이러한 경우에는 구조체를 사용합니다.
즉, 코딩 시 필요한 기능에 정확히 맞는 기법만을 사용한다는 원칙이 있습니다.
물건을 담는 상자만 필요한데 거기다가 자물쇠 있고 뚜껑있고 서랍이 있는 상자를 만드는 수고는
하지 않는다는 뜻입니다.
딱 정확히 맞는 용도에 맞는 도구를 사용한다고 보면 되겠습니다.
반대로, 생성자안에서 맴버 변수도 초기화 해야 되고, 안에 있는 맴버 변수들을 노출시켜서
그 클래스를 사용하는 개발자들에게 쓸데없는 혼란을 주고 싶지 않고, 기능을 갖고 있는
메소드를 같이 정의하는 것이 타당하고.. 이런 명확한 설계상의 이유가 있을 때는 클래스를
쓰는 것이 타당하겠죠?
2. 또한 C ++이 아닌 C 함수를 호출할 때 인자로 넘겨주기 위해서도 씁니다.
네트워크로 보낼때...
구조체에 자료 넣어서 같은 구조체로 받을수 있지만,...
클래스로는 그러한 작업 못합니다.
구조체는 binaryf로 바로 파일로 저장 하지만..
클래스로는 그러한 작업 못합니다.
생각해 보니 못한게 아니고 안해 봤습니다..ㅡ.ㅡ
이 오랜 쓰레드가
이 오랜 쓰레드가 아직도 활발한 것이 의외군요.
struct와 class의 차이를 얘기하려 노력하는 분들이 있습니다만
그런 차이는 전혀 없으며 실제적으론 둘다 됩니다.
즉 class에서 되는건 struct에서 다 되며
struct에서 되는건 class에서 다 됩니다.
이런식으로 사용하면 class또한 struct랑 완전 같죠.
struct도 상속이 되고 멤버함수를 가질 수 있고 가상멤버함수 또한 가질 수 있고 기타등등
class와 완전 동일합니다.
유일한 차이점은 접근자인데...
struct은 기본이 public이고 class는 기본이 private이라는 점이죠.
그래서 상속할때도
같은 차이만 있을뿐 실제 동작은 완전 동일합니다.
차이점은 오히려
C의 struct와 C++의 struct에서 발생합니다.
이 둘은 완전 다릅니다.
C의 struct를 C++의 struct로 해석해도 전혀 문제가 생기지 않을 뿐입니다.
물론 멤버함수를 가지고 있거나 상속을 한다거나 등등의 C++적인 struct를
C에서 돌리려 한다면 많은 문제가 생깁니다.(당연히 안됩니다.)
어쨌든 쀍플달성
어쨌든 쀍플달성 ㅊㅋㅊㅋ
임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
안녕하세요
컴파일 된 후에는 명백히 구조체가 좀더(매우 미묘하게) 빠르지 않을까 생각합니다.
왜냐하면 구조체변수를 지역 변수로 사용할때는 단지 우리가 일반적으로 여러 지역변수를 사용할때와 같이 stack 에 연속적인 공간으로 사용할텐데
class 를 사용하게되면 정보가 좀 더 필요하거나 추가적으로 처리해야될 것들이 더 있지않나요? 우선 현재 함수의 스택 프레임에는 데이터가 저장되어있는 주소값이 저장되어있고(주소를 여러번 타고 들어가서 실제 값을 찾는지 어쩐지는 모르겠음) 실제 데이터는 현재 함수가 사용하고 있는 스택 공간이 아닌 다른 공간(그게 스택이 될지 아닐지는 잘 모르겠지만 어쨋든 같은공간은 아닐듯) 에 저장될 것 같은데요 ㅎㅎ
> class 를 사용하게되면 정보가 좀 더
> class 를 사용하게되면 정보가 좀 더 필요하거나 추가적으로 처리해야될 것들이 더 있지않나요?
없습니다. class와 struct의 차이는 기본 접근 제한자가 private냐 public이냐 이것뿐이고 이건 컴파일 타임에 전부 해결되는 문제이므로 실행 속도와는 전혀 관계 없습니다.
추측은 금물
구조체를 스택에 저장하는 언어는 C#이고, C++에서는 컴파일 된 이후에는 어떠한 차이도 없습니다.
페이지
댓글 달기