기초 자바 질문 하나 드릴께요~
글쓴이: bluesound / 작성시간: 수, 2004/12/22 - 10:10오전
class Calc{ Calc(){ System.out.println("1-3개 사이의 정수를 입력하세요." ); } Calc(int i){ System.out.println("원의 넓이는 "+i*i*3.14+"입니다."); } Calc(int i, int j){ System.out.println("사각형의 면적은 "+i*j+"입니다."); } Calc(int i, int j, int k){ System.out.println("육면체의 부피는 "+i*j*k+"입니다."); } } class Report{ public static void main(String args[]){ switch(args.length){ case 1: new Calc(Integer.parseInt(args[0])); break; case 2: new Calc(Integer.parseInt(args[0]),Integer.parseInt(args[1])); break; case 3: new Calc(Integer.parseInt(args[0]),Integer.parseInt(args[1]),Integer.parseInt(args[2])); break; default: new Calc(); } } }
위는 자바에서 생성자 오버로딩에 관한 예제입니다.
궁금한게 class Calc 를 사용할때
왜 객체 생성없이 바로 new Calc(); 를 사용했는데 에러가 나지
않는건가요?
Calc aaa = new Calc(); 이런식으로 사용해야 하는거
아닌가요? 에러 없이 실행 되는데 이유가 뭘까요?
객체 생성안해도 생성자가 실행 된다는건
함수? 랑 비슷한 경우라고 생각하면 될까요? 흠..
Forums:
Re: 기초 자바 질문 하나 드릴께요~
new Calc(); 가 객체 생성한것입니다.
이것은 두가지 일을 한것이지요.
1) 객체생성
2) 생성된 객체에 대한 레퍼런스를 지정(assignment)
왜? 생성한 객체를, 프로그램에서 나중에 또 쓸라고(호출)...
* C나 C++같이 메모리 관리를 프로그래머가 해주어야 하는경우,
new Calc();
또는
malloc(10);
이렇게만 코딩하면 난리나지요.
자바는 메모리 관리를 프로그래머에게서 뺏어간 언어입니다.
메모리관리는 프로그래머의 숙달과정에 반드시 있어야 하는 것이라고, 생각하는 저는 이렇게 얘기하곤 합니다.
"자바...편하긴(?????) 하지만, 연마하는 사람(학생?)에게 절대 권고하지 않는 언어(플랫폼)입니다. 그러나, 업자가 쓰기에는 좋겠지...."
아...
이 말씀은 Calc aaa; 라는 구문은 객체 생성이 아니라는 말씀이군요
(맞나요? ^^;;)
그렇담...그냥 new Calc(); 로 생성된 객체의
멤버 변수나 메서드에는 접근하지 못나는 것 맞나요?
그리고 결론적으로 위의 예는
바람직하지 못한 코딩인것 같네요 흠..
답변 감사합니다.
Re: 기초 자바 질문 하나 드릴께요~
그리고, 객체 생성시에는 생성자(constructor)가 불리게 되어 있지요?
접근자 없이 new 로 객체 생성해서 메소드 접근할 수 있지요 당연히..
접근자 없이 new 로 객체 생성해서 메소드 접근할 수 있지요 당연히..
(new Class()).method();
(new Class()).member = 5;
뭐 이런식이죠. (괄호를 둘러싸지 않아도 에러는 안나지만 보기에 안좋고 헷갈리죠)
특히 inner class 들의 객체생성은 C++에 그것에 비해서 개념을 달리 할 필요가 있죠.
Class.Inner a = new Class().new Inner();
역시 괄호를 쳐서
Class.Inner a = (new Class()).new Inner();
해주는게 좀더 나아 보이기도 하군요.
댓글 달기