:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
09/03/17 21:40
System 같은 클래스들은 객체를 사용자가 생성할수 없게 막아놓은 걸로 알고 있습니다.
java.sun.com의 API Reference에도 생성이 안된다고 나와 있네요. 아마도 생성자를 private(외부에서 접근할 수 없게 설정하는 키워드)으로 만든 Singleton(객체가 유일하게 하나만 존재해야 하는 디자인 패턴 기법) 객체인 듯하네요.
09/03/17 21:54
답변 감사합니다. 그런데 새로 변수로 설정한 c라는 것을 말할때 인스턴스라고 하나요?
GrayScavenger님 답변에 비추어 검색해보다 보니 인스턴스라는 말이 나오네요.
09/03/17 22:10
이론적인건 가물 가물 하지만 그래도 사족을 조금 더 달자면
System.out.println(c.etTime()); 처럼 직접 클래스 명으로 객체를 접근 하는건 static 으로 선언 되어 있어서 그렇습니다. System 클래스의 경우 GrayScavenger님의 답변 대로 싱글턴 객체로 생각 하셔도 무방 할듯 싶고요, 클래스 멤버들을 살펴 보시면 하드웨어 접근에서 중요한 기능을 담당 하는 클래스죠. 이런 클래스다 보니 남발 하지 못하게 할려는 목적도 있습니다. static 선언자의 기능을 찾아 보시면 보통 객체는 생성자를 호출 했을 당시에 메모리에 할당이 되지만 static으로 선언 되어 있는 객체들은 처음 프로그램이 실행 될때 먼저 메모리에 할당이 됩니다. 프로그램이 종료 할때까지 항상 메모리에 상주해 있는 거죠. 이 경우 장점이 실행 속도가 더 빠르고(뭐 요즘은 체감 할 차이는 없습니다.) 여러 클래스들에서 참조가 쉬워 집니다.
09/03/17 22:14
인스턴스라는 것은 생성된 객체를 말합니다. 객체지향 프로그래밍에서만 쓰이는 것은 아니지만, 간단히 말해서
"년/월/일" 이것은 클래스고 "2009년/3월/17일" 이것은 인스턴스입니다. 클래스는 일종의 틀이고 인스턴스는 실제로 그 클래스가 생성되어서 어떤 값을 가질 수 있는 상태를 말하지요. 물론 날짜라는 것이 2009년 3월 17일만 있는 것이 아니라 2009년 3월 18일도 있을 수 있고 무수히 많을 수 있기 때문에 보통 인스턴스는 여러개를 만들 수 있습니다. new GregorianCalendar() 이것이 GregorianCalendar의 새로운 인스턴스를 생성하라는 말이지요. 저걸 10번 반복하면 인스턴스 10개가 생깁니다. 10개는 각각 다른 값을 가질 수 있지요. (물론 같은 값을 가질 수도 있구요.) 하지만 경우에 따라서 인스턴스가 여러개 생성되면 안되는 경우도 있고, 아예 생성할 수 없는 경우도 있습니다. 하나만 생성할 수 있도록 하는 클래스를 디자인 패턴에서 싱글턴 클래스라고 부르고, 아예 생성을 못하게 하고 메소드만 가져다 쓰게 만든 (예를 들어 Math 클래스 같은) 클래스를 유틸리티 클래스 라고 부릅니다. 크게 중요한 것은 아니지만, System 클래스의 경우 왜 생성을 못하게 했냐면, new System()이 시스템 클래스의 인스턴스를 새롭게 생성하는 명령을 의미하고, 저걸 10번 반복하면 10개의 시스템이 생겨야 되는데, 사실 컴퓨터 시스템은 물리적으로 하나일 수 밖에 없기 때문에 10개의 시스템이 생긴다는 것 자체가 말이 안되는 일이지요. 예를 들어서 System s1 = new System(); System s2 = new System(); 이랬을 때, s1.out.println("s1");이라고 해도 어차피 모니터에 출력되고, s2.out.println("s2");라고 해도 어차피 같은 모니터에 출력됩니다. 때문에 s1과 s2는 결국 같은 대상을 가리키는 것이 되지요. 결국 인스턴스가 둘 이상이 될 수 없기 때문에 하나만 가져다 쓰도록 제한한 것입니다. 사실 System 클래스라든지 싱글턴 패턴 등이 (자바를 처음 배울 때) 엄청난 의미를 가지는 것은 아닙니다만, 클래스에서 new 키워드를 이용해서 인스턴스를 생성하고 변수가 이 인스턴스를 참조하는 과정은 자바를 시작할 때 매우 중요한 부분이고 꼭 익혀야 되는 부분이기 때문에 잘 이해가 안 되시면 그림을 그려보시거나 인터넷을 좀 더 뒤져보시거나 책을 보면서 잘 알아두시는 것이 좋을 것 같네요.
09/03/17 22:16
한가지 더 덧붙이자면 그럼 전부 static으로 선언 해서 더 편해 지는거 아닌가 라는 생각이 드실수 있을 겁니다. 하지만 static 으로 선언 된것은 하나만 존재 할수 있고 처음 실행 되자 마자 불필요하게 많은 메모리를 사용 하는 상황이 될수 있습니다.
|