C++ 에서 객체 생성할 때랑, JAVA 에서 객체 생성할 때에 어떤
글쓴이: vudghkzm / 작성시간: 금, 2005/02/25 - 11:37오전
예를 들어 A 라는 클래스가 있고, 이 클래스는 디폴트 생성자 A() 가 있다고 해봅시다.
그리고 사용자가 A의 인스턴스 a를 만든다고 합시다.
JAVA 같은 경우,
A a;
위와 같이 하면 a 를 선언만 했지 실제로 인스턴스는 안 만든거 맞죠?
근데 C++의 경우
A a;
를 하면 디폴트 생성자 a() 가 자동적으로 불리면서 인스턴스 a 가 생성되는 것인가요?
이 밖에도 OOP에서 JAVA와 C++의 차이에 대해서 비교해 놓은 문서나 책이 있으면 좀 알려주세요. 제가 자바에 익숙해져서 그런지 C++을 공부할 때 자바와 병행해서 보면 더 빨리 익힐거 같아서 그럽니다.
Forums:
[quote="vudghkzm"]근데 C++의 경우A a;
네, 그렇습니다.
비교언어학적 관점에서 접근하시군요.
그런 자료가 있는지는 모르겠습니다. ^^;
문법상 크게 차이나는건 포인터겠죠..물론 C/C++ 에서 포인터 알면 다
문법상 크게 차이나는건 포인터겠죠..물론 C/C++ 에서 포인터 알면 다안거나 마찬가지겠지만요..
----------------------------------------------------------------------------
이런것도 있을 수 있습니다.C++에서는 클래스상에서 다중상속을 지원하
이런것도 있을 수 있습니다.
C++에서는 클래스상에서 다중상속을 지원하지만
자바는 그렇지가 않죠 그래서 인터페이스를 사용합니다.
또한 자바에서는 퍼블릭 클래스는 파일당 하나만 허용하지만
C++에서는 그렇지가 않은 걸로 알고 있습니다.
또한 자바에서는 구조체를 지원하지 않지만
C++에서는 지원합니다
그리고 클래스 실행완료시에 C++은 동적으로 생성한 객체에 대해서
소멸자를 통해서 제거해야 하지만,자바는 자동으로 이것을 해줍니다.
인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com
질문에서 두 언어간 생성자의 가장 큰 차이점은 스택에도 객체가 만들어지느
질문에서 두 언어간 생성자의 가장 큰 차이점은 스택에도 객체가 만들어지느냐 아니냐인 것 같습니다.
스택상에 객체가 만들어지게되면 아주 유용한 코딩 패턴을 사용할 수 있습니다. 바로 스택 와인딩을 이용한 (예외에도 안전한) 리소스 해제인데, 아마 JAVA 같은 언어는 이런 방식을 지원하지 않는 것으로 알고 있습니다. 어차피 가베지 컬렉션으로, 사용하지 않는 객체는 알아서 없애주는 것이기 때문에 애초에 이런 것을 회피할 수 있도록 되어 있다고 알고 있습니다.
C++ 는 객체를 스택에도 만들 수 있고 동적으로 생성할 수 있지만 JAVA 의가베지 컬렉션의 기능은 없습니다. 언어의 철학이 서로 다르고 사용하는 곳도 어느정도 다른 것을 어떤 것이 더 좋다 나쁘다라고 할 수는 없다고 봅니다. (개인적인 취향은 있겠습니다만)
너무 단순하게 생각하는 것은 아닌지 모르겠습니다만, JAVA 의 객체 생성을 C++ 로 표현하자면, (리퍼런스가 더 적합하겠지만 표현하기 좋아서 포인터로 했습니다.)
정도 아닐까요? 여기에 가베지 컬렉션이 더해져 있다고 한번 생각해보았습니다.
여기에 더해서 Delphi (Object Pascal)의 경우에는 일반 변수나 구조체(레코드)는 스택에 만들어지고 (물론 동적으로도 할당가능), 객체(클래스)는 동적으로 생성해야 하지만 가베지 컬렉션은 없습니다.
Re: C++ 에서 객체 생성할 때랑, JAVA 에서 객체 생성할 때에 어
언어적인 측면에서 문법적으로나 개념적으로 자바가 C++의 축약형으로 보시면
어느정도 감이 잡히실 겁니다. 저는 처음에 C++을 공부하고 자바를
공부한 경우라, 자바의 인터페이스 같으면 C++의 abstract class의
pure virtual function등이 비슷하게 머리속에서 매치되더군요.
요즘 java 1.5에서 쓰는 제네릭 프로그래밍 방식도 C++의 STL등과 유사한점을 찾으실수 있을겁니다. auto boxing이나 unboxing 같은 경우도 C++의 형변환을 생각하면 좀더 쉽겠지요.
댓글 달기