인프런 커뮤니티 질문&답변

열심인 참새님의 프로필 이미지
열심인 참새

작성한 질문수

[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]

24_회원리스트 보기(Redirect)

코드 읽는 법에 대해서 질문드립니다 !

작성

·

301

0

PrintWriter out = response.getWriter();

Connection conn = DriverManager.getConnection(url, user, password);

자바TPC 강의에서 예를들면 String str = new String 이 있다고 했을때

str이라는 참조변수를 통해서 String 클래스 안에 정의된 변수 or 메서드 들을 사용하는 것 인데

맨 위의 두 코드들은 new가 아니므로 out이나 conn이 인스턴스를 생성한 것도 아니고

response라는 참조변수가 가르키고 있는 getWriter()메서드를 사용하고 리턴 받은 것을 PrintWriter 주소 안의 박스 한칸에

담고 그것을 out이 가르킨다 맞나요?

out은 객체가 생성되지 않았는데(new가 없으므로) 어떻게 out.println이 가능한건지도 잘 모르겠습니다.

response.getWriter을 통해 리턴 받은 것은 하나의 변수 or 하나의 형태인데 그것이 어떻게 빨대를 만들어 주는 건지도 잘 모르겠습니다..
어디서부터 착각하고 있는지 ㅠㅠㅠ 

A타입 A타입을 가르키는 참조변수 = B타입을 가르키는 참조변수.메서드();

이런 형태 자체를 선생님께서 자바TPC에서 알려주신 메모리 박스처럼 이해를 못하겠습니다 ..ㅜㅜ

질문이 두서없지만 부탁드리겠습니다.. !!

답변 2

1

박매일님의 프로필 이미지
박매일
지식공유자

response.getWriter(); 에서 객체를 만들어서 메모리에 올려주는 것입니다. 그객체가 PrintWriter객체이고 그객체를 out이라는 객체변수로 받았습니다. out은 변수지만 번지가 들어있구요

그코드가 아래코드 입니다.

PrintWriter out = response.getWriter();

out.println()에서 println()메서드는 PrintWriter 에 있는 메서드이기 때문에 . 으로 접근을 하면됩니다.

마찬가지로 getConnect()메서드를 호출하면 Connection객체가 메모리로 올가가고 그객체를 conn으로 받아서 사용하는 것입니다.

conn에는 생성된 객체의 번지가 들어가 있기때문에 .을 찍고 사용하구요. 

객체를 생성할때 꼭 new를 하는것은 안고 다른쪽에서 new를 해서 받아서 사용하는 경우도 많이 있습니다.

여기서 out과 conn은 변수로 보시면 않되고 번지가 저장된 객체변수입니다.

이해가되셨을지요?

아! 그래서 항상  = 등호에서 오른쪽을 적고 왼쪽 타입을 적는 순서로 쓰셨던 거군요 ㅠㅠ! 

클래스를 직접 만들고 쓰다보니 타입이라는게 항상 존재하고 new를 했을때 메모리에 올라오는 줄 알았네요 순서가 new나 메서드를 통해 객체를 만들고 그 타입으로 주소를 만들어주는 거였군요!
이해했습니다 너무 감사합니다.

----------------------------------------------------------------------------------

서블릿의 request나 response 는 어떻게 사용이 가능한 걸까요?

new도 없었고 메서드로 객체를 올려주는 코드도 없었던 것 같습니다. 

---------------------------------------------------------------------------------

어떨때는 타입으로 받지 않고 참조변수도 없이 new aaa();인스턴스 생성한 코드에서 바로 .(온점)을 찍고 메서드를 사용할때도 있던데 그것은 참조변수를 통해서 하는거랑 어떤 차이가 있을까요?

박매일님의 프로필 이미지
박매일
지식공유자

request 나 response 객체는 톰켓서버에서 객체를 생성해주기 때문에 객체를 별도로 생성하지 않아도 됩니다. 즉 클라이언트가 접속할때 클라이언트와 데이터를 주고 받기 위해서 요청객체와 응답객체를 톰켓서버가 만들어주는 것입니다^^

MemberDAO dao = new MemberDAO();

MemberVO vo = dao.memberContent(num);
------------------------------------------------------------------------

위의 두 문장을 

Member vo = new MemberDAO().memberContent(num);

으로도 접근이 가능했습니다. 이것은 참조변수나 클래스로 접근하는 방법이 아닌 제 3의 방법인가요?
MemberDAO 클래스가 스태틱은 아니여서 클래스로 접근하는 것은 아닌 것 같고
참조변수를 만들어 준 것도 아니라 다른 점이 어떤게 있을까요?

혹시 이렇게 쓰는 방법을 정의한 명칭이 있을까요?

바쁘실텐데 답변해주셔서 감사합니다 ㅠㅠㅠ

0

박매일님의 프로필 이미지
박매일
지식공유자

Member vo = new MemberDAO().memberContent(num);

위코드에서 항상 = 을 기준으로 오른쪽 코드를 보면 먼저 new MemberDAO()객체가 생성이되고 바로 memberContent(num)메서드가 호출되는 형식입니다. 이렇게도 사용을 해도되지만 또 다른 메서드를 호출한다면 매번 new MemberDAO()를 해야되기에 먼저 MemberDAO dao = new MemberDAO(); 처럼 선언하시고 쓰는게 좋겠습니다. 접근방법의 차이이지 딱히 부르는 이름은 없구요~~ 

감사합니다 ~~~~~!!

열심인 참새님의 프로필 이미지
열심인 참새

작성한 질문수

질문하기