월요일, 12월 23
Shadow

미분류

#027 The Garbage Collector

미분류
Some object-oriented languages require that you keep track of all the objects you create and that you explicitly destroy them when they are no longer needed. Managing memory explicitly is tedious and error-prone. The Java platform allows you to create as many objects as you want (limited, of course, by what your system can handle), and you don't have to worry about destroying them. The Java runtime environment deletes objects when it determines that they are no longer being used. This process is called garbage collection. An object is eligible for garbage collection when there are no more references to that object. References that are held in a variable are usually dropped when the variable goes out of scope. Or, you can explicitly drop an object reference by setting the variable to the...

#005 구글 플렉스 소개

미분류
다들 아실지 모르겠는데요.. 좋은 정보 하나 드립니다. http://video.google.com/googleplex.html 여기 보시면, 구글 테크토크 자료가 있습니다. 물론 영어이나, 자막처리가 되어 있습니다. 또한 컴퓨터공학 뿐만 아니라 다양한 주제가 있네요. 즉, 영어에 관심이 있으신 분들도 재미있게 보실 수 있을거 같구요. 여러 최신 소식도 접할 수 있을거라 봅니다. Videos from the Googleplex In addition to helping distribute content from across the world, Google would like to share videos featuring our company. The videos on this page give you an overview of our culture, products and business. Whether it's a scientist discussing their latest work or one of our campus events, we hope to provide a sample of great conversations and presentations. Over time we'll continue to add more videos "From the Googleplex." 사회적으로, 정보에 대한 public distribution 이 어느때보다 중요해 지고 있다는 생각이 듭니다. 또한 경쟁력 있는 회사나 학교일 수록, 자신들이 가지고 있는 자원을 공개하고 있는 추세이기도 합니다. ...

#026 javaboutique tutorials

미분류
Tutorials for everyone, from experienced programmers to the novice.   All About the Singleton Design PatternUsing the Singleton pattern allows you to have a class distribute the only instance of itself. This restricts instantiation of a class to one, which can be useful when you require exactly one object to coordinate actions across an application. Generate a PDF Report from a Database with BIRTBusiness Intelligence and Reporting Tools (BIRT) is an Eclipse plug-in reporting system for Web applications. It supports data access from databases, XML documents, EJBs, Web services, JavaBeans, and POJOs. Learn the ins and outs by generating a sample PDF report from a sample database. Parsing with StAX in JDK 6.0Most developers parse their XML documents with the DOM or SAX APIs--...

#025 백터

미분류
java.lang.Object l Class getClass() 객체에 대한 정보를 포함하고 있는 Class 객체를 반환한다. 다음 절에서 보겠지만, 자바는 Class 클래스 안에 캡슐화 되어 있는 클래스의 실행시간 표현을 가지고 있다. l boolean equals(Object obj) 두개의 객체가 동등한지 비교한다. 객체가 같은 메모리 영역을 가리키고 있으면 참값을, 아니면 거짓값을 반환한다. l Object clone() 객체의 복제본을 만든다. 자바는 새로운 인스턴스에 대한 메모리를 할당하고, 현재 객체에 할당 되어 있는 메모리를 복사한다. l String toString() 이 객체의 값을 표현하는 문자열을 반환한다. 대부분의 클래스는 객체의 현재 상태를 출력하기 위해 이 메소드를 중복시킨다. 예를 들면, Date 클래스에서의 toString 은 날짜를 표현하는 문자열을 반환한다. 벡터들(vectors) 특히 C 를 비롯한 많은 프로그램 언어들에서 컴파일 시에 모든 배열들의 크기를 확정해야 한 다. 프로그래머들은 이러한 점이 끼치는 불편함으로 인해 굉장히 싫어한다. 자바에는 좀 더 낳아졌다. 배열의 크기를 런타임에서 설정할 수 있다. int n; . . . Item[] itemOrdered = new Item[n+1]; 물론, 이 코드가 런타임에서 배열을 동적으로 바꿀 수 있도록 완전하게 해결하지는 못했다. 배열의 크기를 한 번 정하고 나면 쉽게 바꿀 수 없다. 대신에 자바에서는 vector 라는 객체를 사용하여 배열을 늘렸다 줄였다 하며 사용할 수 있도록 ...

#024 protected

미분류
보호된 접근 여러분이 이미 알다시피, 클래스의 인스턴스 필드는 보통 private 태그가 붙고, 메소드는 public 태그가 붙는다. private 으로 선언된 특성은 다른 클래스에서 보이지 않는다. 이것은 또한 하위 클래스에서도 마찬가지이다. 하위 클래스는 상위 클래스의 은폐 데이터를 접근할 수 없다. 하지만, 하위 클래스가 메소드나 데이터를 접근하고자 할 때도 있다. 이 경우, protected 로 선언해야 한다. 예를 들면, 기반 클래스인 Employee 가 hireDay 객체를 private 대신 protected 로 선언하면, Manager 메소드는 이것을 직접 접근할 수 있다. 실제로는 protected 특성을 주의하여 사용해야 한다. 여러분의 클래스가 다른 프로그래머에 게 사용되고 있고, 이것이 보호된 데이터를 포함하고 있다고 가정하자. 여러분이 모르는 다른 프로그래머가 여러분의 클래스로부터 파생하여 보호된 인스턴스 필드를 접근할런지 모른다. 이 경우에 다른 프로그래머를 방해하지 않고 여러분의 클래스의 구현을 변경할 수 없다. 보호된 메소드의 경우를 살펴보자. 클래스는 메소드를 protected 로 선언할 수 있다. 이것은 하위 클래스(아마도 조상을 아는)는 이 메소드를 사용할 수 있고, 다른 클래스는 사용할 수 없 음을 의미한다. C++노트 : 자바의 protected 특성은 모든 하위 클래스 뿐만이 아니라 같은 패키지 안의 다른 클래스에서 사용할 수 있다. 이것은 C++의 protected 의 의미와 약간 다르다. 실제로 이런 차 이점은 거의 신경을 쓰지 않아...

#023 상속

미분류
class Manager extends Employee { added methods and fields } 다음은 Employee 클래스를 확장하여 만든 Manager 클래스에 대한 코드이다. class Manager extends Employee { public Manager(String n, double s, Day d) { super(n, s, d); secretaryName = ""; } public void raiseSalary(double byPercent) { // add 1/2% bonus for every year of service Day today = new Day(); double bonus = 0.5 * (today.getYear() - hireYear()); super.raiseSalary(byPercent + bonus); } public String getSecretaryName() { return secretaryName; } public void setSecretaryName(String name) { secretaryName = name; } private String secretaryName; } 키워드 extends 는 기존의 클래스로부터 파생되는 새로운 클래스를 생성한다는 것을 가리킨 다. 기존의 클래스를 상위 클래스(superclass), 기반 클래스(base class), 또는 부모 클래스(parent class)라고 한다. 새로운 클래스를 하위 클래스(subclass), 파생 클래스(derived class), 또는...

#022 메소드 및 정리

미분류
은폐(private) 메소드 클래스를 구현할 때 public 데이터는 위험하므로 모든 데이터 필드는 은폐형으로 만든다. 메 소드의 경우에는 어떠한가?, 대개 public 으로 되어 있지만 private 메소드는 자주 쓰인다. 이 메소드는 클래스의 다른 연산으로부터만 호출된다. 이유는 간단하다. 연산을 구현하기 위 해 코드를 여러 개의 함수로 쪼개기를 원할 수 있다. 이런 함수의 대부분은 공용으로 쓰기에는 유용하지 않다.(예를 들면, 이것들은 현재 구현에 너무 밀접하게 접근해 있고, 특별한 프로토 콜이나 호출 순서를 필요로 할 수도 있다.) 이러한 메소드는 private 연산으로 구현되는 것 이 제일 좋다. 중복(Overloading) 자바의 Date 클래스와 우리의 Day 클래스는 하나 이상의 생성자를 가졌다는 사실을 상기해 보자. 우리는 다음을 사용할 수 있다. Date today = new Date(); 또는 Date preMillenium = new Date(1999, 12, 31); 이런 기능을 중복(overloading)이라 한다. 중복은 다수의 메소드가 동일한 이름(이 경우 Date 생성자 메소드)가지고 있으나 다른 인자를 가질 경우 발생한다. 자바 인터프리터는 어 느 메소드를 호출할지 결정해야한다.(이것을 보통 중복 해결(overloading resolution) 이라고 한다.) ---------------------------------------------------------------------- 노트 : 자바는 생성자 메소드를 포함한 어떤 메소드라도 ...

#021객체 클래스 달력

미분류
자신의 책임에 해당하지 않는 작업을 필요로 한다면, 이 작업을 담당하는 다른 객체에 접근할 필요가 있다. 절차적인 프로그래밍에서의 함수 호출보다 일반적 인 방법을 이용하여 첫번째 객체가 두 번째 객체에게 이러한 작업을 수행하도록 요청한다.(자 바에서는 이러한 함수 호출을 보통 메소드 호출(method call)이라 한다.) OOP 용어로는 클라이언트가 서버 객체에게 메시지를 보내는 것이다. 다른 객체의 내부 데이터를 직접 조작할 수 없다는 점이다. 모든 통신은 메시지, 다시 말하면 함수 호출을 통하여 이루어진다. 적절한 메시지와 내부 데이터를 조작할 수 있도록 객체를 설계함으로써, 재사용성을 극대화 시키며 디버깅 시간을 최소화할 수 있다. 클래스는 객체가 실제로 만들어지는 템플릿(template) 이나 청사진(blueprint)으로 묘사된다. 쿠키 자르는 기구를 연상하여 클래스에 대하여 생각해 보 자. 객체는 쿠키 그 자체이다. 메모리 형태로 “가루반죽”이 할당되어야 할 것이다. 자바는 이 러한 “가루반죽 준비” 과정을 없애주는데 유리하다. 단순히 new 키워드를 사용하여 메모리를 획득할 수 있으며, 아무도 더 이상 이것을 사용하지 않으면 내장된 쓰레기 수집기가 쿠키를 먹 어치울 것이다.(어떤 비유도 완벽하지 않다.) 클래스로부터 객체를 생성하면, 클래스의 인스 턴스(instance)를 생성했다고 한다. AudioClip meow = new AudioClip(); new 연산자를 사용하여 AudioClip 클래스의 새로운 인스턴스(instance)를 생성한다. 이미 보아왔듯이 ...

#020 배열 및 변수

미분류
---------------------------------------------------------------------- 예제 3-7 은 두개의 메소드상에 분산된 코드를 갖는 응용 프로그램이다. 다음 코드를 통해 main 메소드의 lotteryOdds 메소드를 호출하는 방법을 살펴보자: long oddsAre = lotteryOdds(topNumber, numbers); 우리는 main 메소드와 lotteryOdds 메소드가 lotteryOdds 클래스에 속하기 때문에 클래스의 이 름을 명시할 필요가 없다. 여러분은 항상 원하는 전달인자와 메소드 이름을 제공함으로서 같은 클래스의 다른 메소드를 호출할 수 있다. 이것은 다음 구문에서의 메소드 호출과 대조적인다: NumberFormat.getCurrencyInstance(); GetCurrencyInstance 메소드는 NumberFormat 클래스내에 정의된다. 그러므로 반드시 클래스 이 름을 명시해야 한다. ------------------------------------------------------------------------- 자바에서 메소드에 대한 모든 전달인자는 참조에 의해서가 아니라 값에 의해서 전달된다는 사 실을 명심하는 것은 아주 중요하다. 따라서 메소드 호출에 의해서 변수를 변경하는 것은 불가 능하다. 전달인자 변수들은 메소드가 호출될 때 전달인자들이 제공한 값들로 초기화된 지역 변수이다. --------------------------------------------------------------...

#019 배열 변수

미분류
public static void main(String[] args) { int n; … { int k; …. } // k local to block and defined only until the end of the block } 하지만, 동일한 메소드의 다른 블록 내에서 같은 이름의 변수를 선언할 수 없다. public static void main(String[] args) { int n; … { int k; int n; // ERROR – can’t redefine n in inner block …. } } ---------------------------------------------------------------------- C++ 노트 : C++에서 중첩된 블록내에 변수를 다시 정의할 수 있다. 그러나 내부 정의는 외부 정 의의 그림자이다. 따라서 프로그램내의 에러가 될 수 있다. 이러한 이유 때문에 자바는 이것을 불허한다. ---------------------------------------------------------------------- int n; read_data: while(...) { ... for (...) { n = Console.readInt(...); if (n < 0) // should never happen-can’t continue break read_data; // break out of read_data loop ... } } // check for success or failure here ...