'자바'에 해당되는 글 12건
- throw new UnsupportedOperationException() (4) 2009/10/30
- [dW] Diagnosing Java code: Java generics without the pain, Part 1 2008/06/29
- [책] 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기 (6) 2008/04/17
- [dW] 클래스 로딩 문제 분석하기 (4) 2008/03/04
- 티스토리에서 Syntaxhighlighter를 이용하기 (12) 2007/12/04
- Java 성능개선을 위한 Programming 기법 (7) 2007/06/27
- awt와 swing의 차이점 (6) 2007/06/19
- Refactoring (2) 2007/06/18
- 객체지향 프로그래밍. 2007/05/13
- [java] java.util.Properties 클래스 (4) 2007/05/10
- Huffman algorithm(호프만 알고리즘) (8) 2007/05/07
- Head First Java 저자와의 인터뷰 (4) 2006/11/25
throw new UnsupportedOperationException()
Posted at 2009/10/30 10:23// Posted in 나만의 작업/Java자동생성되는 메소드에 throw new UnsupportedOperationException()넣기
이클립스에서 제공해주는 코드 템플릿을 이용하여, 인터페이스를 만들고 그 구현체를 퀵픽스를 통해 메소드를
자동생성했을 때 리턴값이 있을 경우 컴파일에러가 일시적으로 나지 않게 해주기 위해서 return null; 이나
return 0; 이나 임시땜빵으로 이런작업을 해주는데 이게 귀찮을 때
throw new UnsupportedOperationException()을 코드 템플릿을 이용하여 넣어주는 방법
이클립스라면 Preference – Java – Code Style – Code Templates 안에 Code/Method Body에 이를 추가해주면 된다.
자꾸 까먹어서, 링크 해 둡니다.
'나만의 작업 > Java' 카테고리의 다른 글
| throw new UnsupportedOperationException() (4) | 2009/10/30 |
|---|---|
| [Effective Java] 23. 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. (0) | 2009/10/30 |
| [Effective Java] 19. 타입을 정의할 때만 인터페이스를 사용하자. (2) | 2009/10/27 |
| [Effective Java] 15. 가변성을 최소화하자. (2) | 2009/10/19 |
| [Effective Java] 11. clone 메소드는 신중하게 오버라이드 하자. (2) | 2009/10/15 |
| [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. (0) | 2009/09/28 |
| [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) | 2009/09/24 |
| [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) | 2009/09/23 |
| [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2009/09/17 |
[dW] Diagnosing Java code: Java generics without the pain, Part 1
Posted at 2008/06/29 21:31// Posted in 나만의 작업/dWJavaOne 2008 Wrap-up 세미나 발표자료에 올라온 "More Effective Java" 주제로 양수열님이 2nd Edition으로 출간된 Effective Java의 저자직강으로 JavaOne에서 열렸던 내용을 소개하는 부분으로 Java 5.0에 추가된 Generics, Enum types, Lazy initialization 관련 부분이 나와서 찾아보던 중
Generics에 관한 글로 2003년 글로 dW에 있군요.Part 1, Introduction to generic types and support features (February 2003)
Part 2, Extension limitations and implementation strategies (March 2003)
Part 3, Adding support for new operations (April 2003)
Part 4, Adding support for mixins through generic types (May 2003)
Java generics는 Java 5.0 이전에 Collection을 사용중에 어떤 타입을 add한다거나 put하고
다시 꺼낼때 타입 캐스팅을 필요로 하는데 이 과정에서 컴파일시에 나타나지 않았던 막상 값을 꺼내보니
이 타입이 아니다~ 런타임시의 에러를 컴파일시에 체크해주기 위해 나타났죠~
이 Java generics가 등장하면서 혁신(?)이다~ 라는 반응과 < >로 채워지는 코드의 복잡성을 증가시킨다~
라는 주장이 있는데 머... 적절하게 잘 쓰면 되겠죠..(어디..그게 쉽나..ㅠㅠ)
암튼, 코딩하면서 Java generics를 많이 쓰는데, 주로 List<String> , HashTable<String, Integer> 이런식으로 간단하게 쓰는데, Wildcard을 써서 더 유연하게 쓸 수 있도록 Foo<? extends T> 와 Foo<? super T> 이렇게도 쓰는군요..
'나만의 작업 > dW' 카테고리의 다른 글
| [dW] 유닉스 팁: 열 가지 더 좋은 유닉스 습관 (2) | 2008/08/01 |
|---|---|
| [dW] Ajax 성능 도구 (0) | 2008/08/01 |
| [dW] 아파치 메이븐 2 시작하기 (4) | 2008/07/11 |
| [dW] REST 서비스 작성하기 (2) | 2008/06/30 |
| [dW] Diagnosing Java code: Java generics without the pain, Part 1 (0) | 2008/06/29 |
| [dW] Practically Groovy: Reduce code noise with Groovy (0) | 2008/06/24 |
| [dW] Ajax에서 XML 처리하기 (2) | 2008/05/28 |
| [dW] Learn 10 good XML usage habits (2) | 2008/05/23 |
| [dW] XStream으로 자바 객체를 XML로 직렬화하기 (6) | 2008/05/22 |
[책] 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기
Posted at 2008/04/17 13:42// Posted in 책과 영화,음악이야기/책![]() | 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기 - ![]() 이상민 지음/한빛미디어 |
이번으로 세번째 Blog2Book 시리즈를 읽었습니다.
이번 책은 자바 초보 프로그래머인 저에게 유용한 정보가 많이 있었습니다. 이 책은 코드 짜긴 짜는데 우선은 급급한 처지에 있는(저같은..) 프로그래머에게 한숨 돌릴 수 있도록(?) 자신의 코드를 점검해 보라는 취지에서 읽기에 좋은 것 같습니다. 엄청!나게 새로운 지식이 있는건 아니지만 아차하고 그냥 넘어갈 수 있을 수 있는 부분이여서 저에겐 ~ +_+
아직은 튜닝보다는 코딩습관을 어떻게 들여야 할까에 대해 더 관심이 있는 저로서는, 튜닝에 대한 툴소개가 많지않을까~ 생각되었는데 의외로 개발하면 서 자세히 모르고 마냥 코딩을 하다보면 얼마나 서버에게 미안한 일(?)이 많아질 지 경고해 주고 있는 부분이 많아서 뜨끔하며 읽게 되었습니다.
앞부분은 코딩 습관에 대해서 뒷 부분은 튜닝, 모니터링등에 관한 글로 이루어져 있습니다.간단하게 살짝의 Tip과 기억해야할 것을 정리해 둡니다. 자세한 건 책을 역시 보시는게 좋겠죠.
1. toString()과 equlas() override하자
Value Object라고 불리는 객체(흔히 setter/getter를 가지고 데이터 전송을 하기 위한 객체)는 toString()메소드를 구현하지 않으면 VO객체에 toString() 메소드를 수행하면 com.buri.ValueObject@c12345 같이 알 수 없는 값을 리턴하는데 Junit에서 테스트하면서 값 비교를 할 때나 데이터를 확인 할 일이 있을때 쓰면 유용하게 쓸 수 있다.
public class ValueObject {
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("name = ").append(name);
return sb.toString();
}
}
이렇게 직접 구현해도 되고, Jakarta Commons Lang 라이브러리를 이용해서
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
equals메소드도
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
프로파일링 툴(프로파일러) : 시스템 문제 분석 툴
요즘은 많이 사용하는 JenniferSoft의 Jennifer나 CA Wily의 Introscope, Veritas의 I3, Compuware의 Vantage Analyzer와 같은 APM(Application Performance Monitoring 혹은 Management)툴도 있는데 이 툴은 운영용 서버를 진단 및 모니터링하기 위한 툴이다.
APM툴은 운영 환경용 툴, 프로파일링 툴은 개발자용
자바 기반의 애플리케이션을 분석하는 프로파일링 툴
상용: 컴퓨웨어의 DevPartner for Java와 퀘스트 소프트웨어의 JProbe가 있다.
비상용 : 넷빈즈의 프로파일러, 이클립스의 TPTPEclipse Test & Performance Tools Platform
이클립스의 TPTPEclipse Test & Performance Tools Platform
TPTP 참고
http://www6.software.ibm.com/developerworks/education/os-ecl-tptp/index.html : ibm id 있어야 함
http://www.eclipse.org/tptp/platform/index.php
http://www.ibm.com/developerworks/kr/library/tutorial/os-ecl-tptp/section3.html
eclipse의 TPTP 툴의 범위는 굉장히 넓어서 프로파일링에 대한 내용만 공부하려 해도 방대하다고 한다. 그래도 한번 써보면 좋을 것 같다(우선 있다는걸 알아두고!)
3. 시간 관련 메소드
static native long currentTimeMillis(); 현재의 시간을 ms로 리턴(1/1,000초)
UTC라는 시간 표준 체계를 따르는데 1970년 1월 1일부터 시간을 long타입으로 리턴
static native long nanoTime(); 현재의 시간을 ns로 리턴한다.(1/1,000,000,000초) - JDK 5.0부터 추가nanoTime() 메소드를 만든 목적은 수행된 시간 측정이기 때문에 오늘의 날짜를 알아내는 부분에는 사용하면 안된다.
JDK 5.0 이상이라면 시간 측정용으로 만들어진 nanoTime()메소드를 사용하는게 좋을 것 같다.
툴을 사용하지 않을 것이라면, 자신만의 StopWatch 클래스를 만들어 측정하는것도 좋다.
4. String, StringBuffer, StringBuilder
String 클래스는 더할 경우 새로운 객체를 생성한다. JDK 5.0 이상부터는 자동으로 StringBuilder 클래스로 변환해 주긴하지만, 반복 루프를 사용해서 문자열을 더할때에는 객체를 계속 추가한다는 사실에는 변함이 없다.
가급적이면 String클래스를 쓰는 대신, 스레드와 관련이 있으면 StringBuffer를, 스레드 안전 여부와 상관이 없으면 StringBuilder를 쓰는 것이 좋다.
5. static 제대로 한번 써보자
static 초기화 블록은 클래스 어느곳에나 지정할 수 있는데 클래스가 최초 로딩될 때 수행되므로 생성자 실행과 상관없이 수행된다.
static의 특징은 다른 JVM에서는 static이라고 선언해도 다른 주소나 다른 값을 참조하지만, 같은 JVM이나 같은 WAS 인스턴스에서는 같은 주소와 같은 값을 참조.
GC의 대상도 되지 않는다. static을 잘만 사용하면 성능을 뛰어나게 향상시킬 수 있지만, 잘못 사용하면 예기치 못한 결과를 초래하게 된다.
객체를 다시 생성한다고 해도 그 값은 초기화되지 않고 해당 클래스를 사용하는 모든 객체에서 공유하게 된다.
자주 사용하고 절대 변하지 않는 변수는 final static으로 선언하자
설정 파일 정도보 static으로 관리하자.
코드성 데이터는 DB에서 한번만 읽자.
6. 오바해서 reflection 관련 클래스는 쓰지말자.
public String checkClass(Object src){
if(src.getClass().getName().equals("java.math.BigDecimal")){}
}
해당 객체의 클래스 이름을 알아 내기 위해 getClass().getName()을 사용하였지만 이것은
public String checkClass(Object src){
if(src instanceof java.math.BigDecimal){}
}
instanceof를 사용하는 것이 클래스 이름으로 해당 객체의 타입을 비교하는 방법보다 낫다.
클래스의 메타 데이터 정보는 JVM의 Perm 영역에 저장된다는 사실을 기억
만약 Class 클래스를 사용하여 엄청나게 많은 클래스를 동적으로 생성하는 일이 벌어지면 Perm 영역이 더 이상 사용할 수 없게 되어 OutOfMemoryError가 발생할 수 있으니 조심해서 사용
7. 동기화를 위해 자바에서 제공하는 것들
스레드 관련한 클래스, 메소드 기법으로 JDK 5.0에서 추가된 java.util.concurrent 패키지의 네가지 주요 개념
- Lock : 실행 중인 스레드를 간단한 방법으로 정지시켰다가 실행시키도록한다. 데드락을 피할 수 있다.
- Executors : 스레드를 더 효율적으로 관리할 수 있는 클래스들을 제공. 스레드 풀도 제공.
- Concurrent 콜렉션
- Atomic 변수 : 동기화가 되어 있는 변수를 제공. 이 변수를 사용하면 synchronized 식별자를 메소드에 지정할 필요없이 사용가능
더 자세히 : http://java.sun.com/docs/books/tutorial/essential/concurrency/highlevel.html
8. NIO에서 IO를 위한 새로 도입된 개념
- 버퍼의 도입
- 채널의 도입
- 문자열의 엔코더와 디코더 제공
- Perl 스타일의 정규 표현식에 기초한 패턴 매칭 방법 제공
- 파일을 잠그거나 메모리 매핑이 가능한 파일 인터페이스 제공
- 서버를 위한 복합적인 Non-blocking IO 제공
더 자세히 : http://java.sun.com/developer/technicalArticles/releases/nio/
'책과 영화,음악이야기 > 책' 카테고리의 다른 글
| 책이, 내게 묻는다 - 바다의 기별 리뷰 (3) | 2008/12/15 |
|---|---|
| [책] 프리젠테이션 젠 (4) | 2008/08/13 |
| "프리젠테이션 젠" 리뷰어 신청한 글을 공개(?)합니다. (4) | 2008/07/03 |
| [책] 서른 살이 심리학에게 묻다 (6) | 2008/05/12 |
| [책] 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기 (6) | 2008/04/17 |
| "몰입"- Think Hard : 소망하고 추구하는 것을 실현시키는 몰입적 사고 (4) | 2008/03/10 |
| [책] 열씨미와 게을러의 리눅스 개발 노하우 탐험기 (4) | 2008/03/10 |
| [책] 뉴욕의 프로그래머 (10) | 2008/01/05 |
| [책] 패턴 그리고 객체지향적 코딩의 법칙 (6) | 2008/01/04 |
-
2008/04/17 18:52 [Edit/Del] [Reply]5. 시간 관련에 nano까지 재는건 오바가 아닐까 하네요. ㅋ.
6. instanceof로 하면 하위 클래스까지 찾아 지는데 ;;
걍 전적으로 제생각입니다. ㅋ -
-
seattle2008/04/19 09:22 [Edit/Del] [Reply]측정치(특히 시간이나 속도)는 알게 모르게 개발자의 로망이자 자존심인거 같아요.
아님 말고요 -_-v
[dW] 클래스 로딩 문제 분석하기
Posted at 2008/03/04 10:16// Posted in 나만의 작업/dW원문이 나온지는 좀 되었지만, 한번 읽어보기에 좋은 것 같습니다.
아래 내용은 저혼자 공부하면서 내용을 잠깐 정리해 본 것입니다.
Part 4로 이루어져 있기에 정리한 내용보다 더 방대한 내용이 담겨져 있습니다. ^^
클래스 로딩 문제 분석하기, Part 1: 클래스 로딩과 디버깅 툴 소개 (한글)
클래스 로딩 문제 분석하기, Part 2: 기본적인 클래스 로딩 예외(Exception) (한글)
클래스 로딩 문제 분석하기, Part 3: 특이한 클래스 로딩 문제 해결 (한글)
클래스 로딩 문제 분석하기, Part 4: 교착 상태와 제약 조건 (한글)
원문 시리즈
http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=demystifying+class+loading+problems
Demystifying class loading problems, Part 1: An introduction to class loading and debugging tools
Demystifying class loading problems, Part 2: Basic class loading exceptions
Demystifying class loading problems, Part 3: Tackling more unusual class loading problems
Demystifying class loading problems, Part 4: Deadlocks and constraints
그 외 ClassLoader와 관련된 글
Java programming dynamics, Part 1: Classes and class loading
<Part 1 : 클래스 로딩과 디버깅 툴 소개>
클래스 로더는 클래스들을 Java Virtual Machine (JVM)에 로딩하는 일을 담당한다. 단순한 애플리케이션들은 자바 플랫폼에 내장되어 있는 클래스 로딩 장치를 사용하여 클래스들을 로딩한다. 보다 복잡한 애플리케이션들은 고유의 클래스 로더를 정의하기도 한다. 어떤 종류의 클래스 로더를 사용하든지 간에, 클래스 로딩 과정 동안 문제가 생길 수 있다. 이 같은 문제를 피하려면, 클래스 로딩의 구조를 이해해야 하여야 하며, 이를 통해, 문제가 발생하면 진단 기능과 디버깅 기술이 문제 해결에 도움이 될 것이다.
클래스 로딩은 로딩(loading), 링크(linking), 초기화(initializing) 단계로 나뉜다.로딩 단계는 필요한 클래스 파일을 배치하고(각각의 classpath를 통해 검색함) 바이트코드로 로딩하는 단계이다. JVM의 로딩 프로세스는 클래스 객체에 매우 기본적인 메모리 구조를 제공한다.
링크(Linking)는 세 단계 중에서 가장 복잡한 단계이다. 다음과 같이 세 개의 주요 단계들로 나뉜다.
초기화(initialize) 단계 동안, 클래스 내에 포함된 정적 이니셜라이저(initializer)들이 실행된다. 이 단계의 끝에 가서는 정적 필드들이 기본 값으로 초기화 된다.
<Part 2: 기본적인 클래스 로딩 예외(Exception)>ClassNotFoundException
ClassNotFoundException은 클래스를 로딩하려는 분명한 시도가 실패할 경우에 던져진다.
NoClassDefFoundError
자바 가상 머신(Java virtual machine) 또는
ClassLoader 인스턴스가 클래스 정의 중 로딩을 시도하고(정상적인 메소드 호출의 일환으로, 또는 새로운 식을 사용하여 새로운 인스턴스를 생성하는 것의 일환으로), 이 클래스에 대한 어떤 정의도 찾을 수 없을 때 예외(Exception)가 던져진다.ClassCastException
이는 코드가 인스턴스가 아닌 것의 하위 클래스로 객체를 캐스팅(cast)할 때 생기는 예외(Exception)이다.
UnsatisfiedLinkError
JVM이
native로 선언된 메소드의 적절한 기본 언어 정의를 찾을 수 없을 때 발생한다.ClassCircularityError
클래스나 인터페이스는 자기 자신의 하위 클래스나 하위 인터페이스가 되므로 클래스나 인터페이스는 로딩될 수 없다.
ClassFormatError
요청 받은 컴파일 된 클래스 또는 인터페이스를 지정하는 바이너리 데이터가 잘못 구성되었다.
ExceptionInInitializerError
E라는 예외(Exception)를 갑자기 던지고 종료하고, E의 클래스가 Error 또는 이것의 하위 클래스들 중 하나가 아니라면, ExceptionInInitializerError 클래스의 인스턴스가 E라는 인자와 함께 생성되어 E를 대신하여 사용된다.ExceptionInInitializerError 클래스에서 새로운 인스턴스를 만들기를 시도하지만 Out-Of-Memory-Error가 발생하여 그렇게 할 수 없을 경우, OutOfMemoryError 객체가 대신 던져진다
<Part 3: 특이한 클래스 로딩 문제 해결>
같은 듯한 다른 classpath문제
classpathh에 /(slash)로 끝나는 경로와 slash가 없는 경로의 차이점
예제에서의 결과
Class Z loaded.
file://C:/CL_Article/ClasspathIssues/cp
java.lang.ClassNotFoundException: Z
at java.net.URLClassLoader.findClass(URLClassLoader.java:376)
at java.lang.ClassLoader.loadClass(ClassLoader.java:572)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
at ClasspathTest.run(ClasspathTest.java:28)
at ClasspathTest.main(ClasspathTest.java:36)
URLClassloader는 약간 다른 매개변수를 전달한다. 첫 번째 클래스 로더 cl1에는 뒤에 /가 붙은 classpath가 주어진다. 두 번째 클래스 로더인 cl2의 classpath에는 /가 붙지 않는다. 클래스 로더는 /가 붙지 않은 경로는 JAR 파일을 참조하는 것으로 간주하기 때문에 이는 매우 중요한 차이이다. /로 끝나는 경로들만 디렉토리를 참조하는 것으로 간주된다.
이러한 문제를 해결하는 방법은 각 경로의 끝에 /가 꼭 붙도록 해야 한다.
가비지 컬렉터는 클래스 로더와 긴밀하게 상호 작동한다. 무엇보다도, 컬렉터는 클래스 로더 데이터 구조를 검사하여 어떤 클래스가 활성(live) 상태인지를 파악한다. 다시 말해서, 가비지 컬렉션 대상이 아닌지를 결정한다. 이는 예상치 못한 문제로 이어질 수 있다.
클래스 로더가 참조되지 않을 때, 로딩되는 클래스들은 가비지 컬렉션 될 수 없다. ObjectStreamClass lookup table에서 SerializationClass 클래스에 대한 활성 참조가 있기 때문이다. ObjectStreamClass는 근원 클래스이기 때문에 가비지 컬렉션 대상이 될 수 없다. lookup table은 ObjectStreamClass의 정적 필드로부터 참조되고 이것의 인스턴스 보다는 클래스에 저장된다. 결국, SerializationClass에 대한 참조는 JVM의 수명 기간 동안 존재하며, 클래스는 가비지 컬렉션 대상이 될 수 없다. 중요한 것은, SerializationClass는 정의하는 클래스 로더에 대한 참조를 갖고 있기 때문에 완전하게 참조되지 않을 수는 없다.
이러한 문제를 해결하려면, 직렬화 되지 않은 클래스들은 가비지 컬렉션 될 필요가 없는 클래스 로더(예를 들어, 시스템 클래스 로더)에 의해 로딩되어야 한다.
<Part 4 : 교착 상태와 제약 조건>
두 개의 쓰레드가 각각 다른 클래스 로더에 잠금을 갖고 있고, 두 개의 쓰레드 모두 다른 쓰레드가 갖고 있는 잠금을 기다릴 때 발생한다. 두 개의 쓰레드는 다른 한쪽의 클래스 로더에 대한 잠금을 무한정 기다리기 때문에 교착 상태에 빠지게 된다. 이러한 교착 상태는 일반 델리게이션 모델이 우회(bypass)될 때 멀티 쓰레드 환경에서 발생할 수 있다.
제약 조건 :
두 개의 클래스 로더들이 같은 이름을 가진 다른 클래스들(다시 말해서, 다른 바이트코드)를 로딩하면, 클래스 로더 제약 조건이 이들 간 유형 미스매치(mismatch)가 없도록 보장해 준다.
JVM 스팩에 따라, 다음과 같은 네 가지 조건들을 갖고 있으면 클래스 로더 제약 조건을 위반한 것이다.
N이라고 하는 ClassC의 초기화 로더처럼 JVM에 의해 기록된 로더L이 존재한다.
N이라고 하는 클래스C'의 초기화 로더처럼 JVM에 의해 기록된 로더L'이 존재한다.
- 부과된 제약 조건에 의해 정의된 대등 관계가
N L = N L'를 함축하고 있다.C != C'
'나만의 작업 > dW' 카테고리의 다른 글
| [dW] Practically Groovy: Reduce code noise with Groovy (0) | 2008/06/24 |
|---|---|
| [dW] Ajax에서 XML 처리하기 (2) | 2008/05/28 |
| [dW] Learn 10 good XML usage habits (2) | 2008/05/23 |
| [dW] XStream으로 자바 객체를 XML로 직렬화하기 (6) | 2008/05/22 |
| [dW] HTML 5와 XHTML 2에 관련된 글(dW문서와 그외) (2) | 2008/04/28 |
| [dW] Ajax 오버홀(overhaul), Part 1: Ajax와 jQuery로 기존 사이트 개선하기 (한글) (4) | 2008/04/20 |
| [dW] Acegi로 자바 애플리케이션 보안화 하기, Part 1: 아키텍처 개요와 보안 필터 (한글) (4) | 2008/03/23 |
| [dW] 클래스 로딩 문제 분석하기 (4) | 2008/03/04 |
| [dW] IBM developerWorks 리뷰 블로거 2.0 선발과 Mylyn 2.0 통합된 태스크 관리 & 자동화된 콘텍스트 관리 (8) | 2008/02/23 |
-
-
2008/03/04 18:15 [Edit/Del] [Reply]@_@ 클래스 로딩도 파고들면 무지 복잡하네요.
커스텀 클래스로더가 있다는 것도 신기하고...
버리님 공부 열심히 하셔서 넘 멋져보여요 ㅎㅎ 부럽기도 하구요. ^^
티스토리에서 Syntaxhighlighter를 이용하기
Posted at 2007/12/04 23:57// Posted in 나만의 작업그다지 많이 필요없었지만, 앞으로 소스코드 하이라이팅을 할 수 있다면
편할 것 같아서 찾다가 태터툴즈는 플러그인을 찾아보니 있던데, 티스토리는 없는것 같더군요.
그러다 겨우 syntaxhighlighter를 tistory에서 사용 하는 방법. 을 찾았습니다!
자세한 설명은 여기 링크를 이용하시면 될것 같습니다.~ 너무 잘 정리해 놓으셔서,,
다양한 언어를 지원해서 좋더군요. 제가 주로 쓰는 Java 문법 하이라이팅을 테스트 해보았습니다.
Javascript로 이루어진 소스코드를 받아서 티스토리의 HTML/CSS에 업로드하고 링크만
시키면 되어 너무 편합니다. ^_^
Java
쓰는 방법은, 그리 완전 편하진 않지만 그래도 참을만 합니다.
<pre>태그와 </textarea>를 이용하는 방법중 한가지를 이용하면 됩니다.
... some code here ...
</pre>
... some code here ...
</textarea>
주의하실점은 스킨을 살짝 건들수 있으니 미리보기 반드시 보구 적용하세요~
'나만의 작업' 카테고리의 다른 글
| 자바스크립트 로깅 라이브러리 Blackbird (2) | 2008/11/03 |
|---|---|
| 윈도우용 launcy (0) | 2008/08/31 |
| hello! blogger 대한민국 블로거 컨퍼런스 참가신청 (6) | 2008/03/05 |
| J2EE의 소프트웨어 디자인 원칙 (8) | 2008/01/17 |
| 티스토리에서 Syntaxhighlighter를 이용하기 (12) | 2007/12/04 |
| XML to JSON (6) | 2007/11/24 |
| 구글꺼야? SearchMash (16) | 2007/10/30 |
| 5회 스프링 프레임웍 사용자 모임에 다녀왔습니다. (10) | 2007/10/28 |
| Google Developer Night에 다녀와서,, (14) | 2007/10/17 |
-
2007/12/05 10:01 [Edit/Del] [Reply]요즘 구글 코드 하일라이터 이용해서 코드 올리시는 분들이 많더군요~
확실히 검은색 글자들만 보는것 보다 이게 훨씬 눈에 잘 들어오긴 해요 ^^
그나저나 버리님 플밍관련 블로그 따로 분리시키셔도 될 정도로 열심이신듯~ -
2007/12/05 10:13 [Edit/Del] [Reply]이런 기능도 있군요..^^
도대체 어디서 이런 걸 찾아 내는 거에요^^...
산골소년과 함께 감탄을 금할 수 없는 버리님^^ 화이팅.... -
-
-
-
Java 성능개선을 위한 Programming 기법
Posted at 2007/06/27 00:35// Posted in 나만의 작업. 임시로 사용하기 위해 Object를 생성하는 것을 피하라. 특히 Loop에서..
. 빈번하게 호출되는 메소드에서 Object를 생성하는 것을 피하라.
. 가능한 Object를 재사용 하라.
. 임시 Object의 생성을 줄이기 위해 데이타 타입 컨버전 메소드를 재정의 하는 방법을 고 려하라.
. 메소드 설계 시 데이타를 유지하고 있는 Object를 반환하는 메소드보다 데이타로 채워진 재사용 가능한 Object에 접근하는 메소드를 정의하라.
. string이나 Object를 integer 로 대치하라. Object 비교를 위해 equal() 메소드를 호출하지 말고 기본 데이타 타입의 == 연산자를 사용하라.
. 인스턴스 변수로 기본 데이타 타입을 사용하라.
. 단지 메소드 호출을 위해 Object를 생성하는 것을 피하라.
. String 연속 연산자 (+)를 사용하는 것보다 StringBuffer 클래스를 사용하라.
. 복사본을 생성하는 메소드 보다 Object를 직접 수정하는 메소드를 사용하라.
. 생성자는 간단하게... 상속 계층은 얕게...
. 인스턴스 변수를 초기화 하는 것은 한 번 이상 하지 말 것.
. 생성자 호출을 피하기 위해 clone() 메소들 사용할 것.
. 간단한 배열일 경우에는 초기화를.. 복잡한 배열일 경우에는 clone() 메소드 호출.
. 프로그램 내부에서 Object 생성 시기를 조절해서 Object 생성에 따른 bottlenecks를 없앤 다.
. 어플리케이션 내부에서 여분의 시간이 허용된다면 가능한 Object를 빨리 생성하라. 생성 된 Object를 내부적으로 유지하고 있다가 요청이 발생하면 할당하라.
. 사용 가능성이 희박하거나, 분산처리에 의해 Object를 생성할 경우 Object는 생성 시기를 늦춰라
프로그래밍 스타일
Java Programming Style Guidelines
번역Code Conventions for the JavaTM Programming Language
'나만의 작업' 카테고리의 다른 글
| 무서운 Web.. ? 검색엔진... (11) | 2007/08/26 |
|---|---|
| firefox가 느릴때.. (10) | 2007/08/04 |
| Safari 3.0 for Windows를 맛본 후 (6) | 2007/07/04 |
| Enable the Debug menu in Safari 3.0 for Windows (2) | 2007/07/03 |
| Java 성능개선을 위한 Programming 기법 (7) | 2007/06/27 |
| awt와 swing의 차이점 (6) | 2007/06/19 |
| Refactoring (2) | 2007/06/18 |
| 트래픽초과의 압박으로 티스토리로 이전하였습니다. (10) | 2007/06/16 |
| 웹표준을 위한 CSS (4) | 2007/06/15 |
-
2007/06/27 10:09 [Edit/Del] [Reply]고려하면서 프로그래밍하기는 좀 복잡하네요. ^^;; 복잡하다기보다 편의를 위해 사용하는 것들이 많아서 자바/C# 언어의 장점인 편의와 대치되는 것들이 좀 있는 것 같아요.
그리고 equals() 메소드 대신 == 를 쓰면 안되는 상황도 있고요.(equals() 재정의 같은 경우...)
퍼포먼스 향상이 꼭 필요할 때 체크리스트로 활용하면 좋겠네요 ^^-
버리야2007/06/28 00:48 [Edit/Del]예전에는 어떻게 짜면 될까,,를 고민했는데
이제는 어떻게 짜면 이쁘게 짤까,, 고민이 되네요..
디자인패턴이나 퍼포먼스 향상 공부를 해도
적용은 쉽지 않지만 잊지는 않아야겠죠..
늘 염두해 두고 프로그래밍을 해야한다는건,,^^
-
-
-
2007/07/31 22:58 [Edit/Del] [Reply]String를 연속해서 + 를 사용하는 경우에 complier 가 알아서 StringBufferf로 변경해주는 경우도 있답니다. ㅎ ;; ( 디컴파일 하니깐 그렇게 나오더라구요~ 우연찮게 발견. ㅋ ^_^;; ㅎㅎ )
awt와 swing의 차이점
Posted at 2007/06/19 21:26// Posted in 나만의 작업AWT는 Abstract Windows Toolkit의 약자로 '추상 윈도우 개발 도구'라는 뜻으로
운영체제의 자원을 이용하여 control의 외형을 형성합니다.
즉 MS의 윈도우와 유닉스계열에서 GUI가 비슷하게는 나타나지만 같게 보이지는 않습니다.
그래서 'abstract'인거지요.
예로 button component를 생성하면 운영체제마다 그 버튼의 모양과 크기는 조금씩 다르게 나타납니다. 이것이 peer를 통한 component의 생성으로 나타나는 문제입니다.
(현재 운영제체의 각 component를 peer component라고 합니다.AWT는 기반운영시스템에서 Native code를 빌려서 GUI를 생성시킨 Peer 구조를 가집니다.)
운영체제에서 표현하고자 하는것을 중립적으로 표현하기에는 좋지만
다양하게 표현하기엔 힘들다는것이 단점입니다. 그래서 예쁘게 나오기도 힘들구요
제한된 GUI 컴포넌트, 레이아웃 매니저, 이벤트를 가진 매우 단순한 툴킷입니다.
더 자세한 설명
more..
Swing(Part of Java Foundation Classes)은 운영체제에 구애받지 않고 구현할 수 있다.
기존의 awt는 해당 운영체제의 GUI를 빌려쓰는 형식이지만 Swing은 pure java로만
구성되어 있기때문에 리눅스든 윈도우든 솔라리스든간에 인터페이스가 동일하다
다만 단점은 AWT보다 느리다는 것.
AWT component is also known as heavyweight component because all AWT components have its peer, the native GUI components. For example, Button, TextArea, and Label are heavyweight components. They have peer in C code on the native platform.
Swing was developed to enhance the AWT toolkit by allowing user to create lightweight components which do not have the native GUI component. For example, JTabbedPane is a lightweight component of Swing. It has no peer in C code on the native platform.
참고로 eclipse는 swt(Standard Windows Toolkit)로 GUI가 개발되었습니다.
swing과 swt의 비교
Swing : J2SE를 위한 GUI 툴킷
SWT : IBM의 공개 프로젝트인 Eclipse 플랫폼의 제작을 위해 별도로 개발된 라이브러리
SWT는 Standard Widget Toolkit의 줄임말로 각 운영체제자체에서 제공되는 위젯 툴킷을 통합한 그래픽 라이브러리다. 이는 각 타겟 플렛폼에 꽤나 의존적이 될 수도 있음을 의미하지만, OS독립적인 API를 제공함으로써 이 문제를 해결하고 있다. 이들 API는 목표가 되는 운영체제 시스템의 GUI코드를 wrapper함으로써 개발자 입장에서는 운영체제에 신경쓰지 않고 동일한 코드를 유지할 수 있게 된다.
덧붙여 설명하자면, Swing은 모든 위젯이 운영체제와 별개를 사용하는데(자바의 모토가 One make All use 아니던가) 그렇기때문에 Swing의 GUI는 웬지 눈에 낯설고 어색해 보이는 면이 있어왔다. 그러나 SWT는 가능한한 사용할 수있는 모든 Native Widget은 사용하고, 그러하지 않는 부분만 자바의 자체 위젯을 사용한다. 때문에 최대한 그 OS의 Native GUI와 비슷한 모습을 보여주는것이다.(Native에서 제공하지 않는 자체 위젯까지 포함하므로 때론 더 이쁠수도 있겠다. 물론 반대인 경우도 있겠지만).
그럼 자바가 시스템에 독립적이지 않은게 아닌가? 하고 반문할지 모르지만 위에 설명된 바와같이 공통적인 API를 사용하므로서 (Abstract Layer라고 볼 수 도 있겠다) OS가 다르다고 해서 소스코드의 변경을 필요로 하지 않는것이다. (VM차원에서 Native Widget를 해당 API로 랩핑해주므로)
참고한 URL
http://www.javastudy.co.kr/docs/yopark/chap08/chap08.html#_Toc466766198
http://abangwithjava.blogspot.com/2006/09/java-gui-awt-swing-and-swt.html
http://blog.naver.com/zzanggoosoft?Redirect=Log&logNo=30009621746
http://www.ibm.com/developerworks/java/library/os-swingswt/index.html
'나만의 작업' 카테고리의 다른 글
| firefox가 느릴때.. (10) | 2007/08/04 |
|---|---|
| Safari 3.0 for Windows를 맛본 후 (6) | 2007/07/04 |
| Enable the Debug menu in Safari 3.0 for Windows (2) | 2007/07/03 |
| Java 성능개선을 위한 Programming 기법 (7) | 2007/06/27 |
| awt와 swing의 차이점 (6) | 2007/06/19 |
| Refactoring (2) | 2007/06/18 |
| 트래픽초과의 압박으로 티스토리로 이전하였습니다. (10) | 2007/06/16 |
| 웹표준을 위한 CSS (4) | 2007/06/15 |
| [디자인패턴] bridge & adapter & mediator pattern (2) | 2007/06/13 |
-
2007/06/19 23:55 [Edit/Del] [Reply]그렇군요. 저도 웹만 후벼파다보니 이런건 잘 모릅니다. 예전에 봤었어도 다 까먹었고요.
내가 가진 지식은 백사장의 모래알 한줌이나 될런지 모르겠네요.. 라는 생각이 문득 스쳐지나갑니다. -
-
2007/06/28 17:22 [Edit/Del]아, 그게요. ^^;
학부 시절에 데이터 구조 같은 과목에서 처음 배우는 언어가 몇년 전에는 C였는데, 요즘에는 자바잖아요. 졸업할 때까지 C로 코딩을 한번도 안해본 학생이 있을 정도로 자바가 일반화되어 있더군요. 그래서 요즘 세대를 Java 세대라고 한데요. ㅎㅎ
Refactoring
Posted at 2007/06/18 21:47// Posted in 나만의 작업more..
마틴 파울러의 리팩토링 분류방식
펼쳐서
Eclipse 3.2를 활용한 리팩토링 - (1) Eclipse 3.2를 활용한 리팩토링- (2)
Eclipse의 refactoring 기능을 잘~ 못쓰는데
날짜별, 시간별 history도 있군요. 역시나... 이게 있으면 맘편히 refactoring 해도 되겠군요.
나쁘고 건강하지 않은 코드의 속성
중복
같은 역할의 코드가 중복되는 경우를 의미
뚱뚱
일반적으로 프로그램 요소가 지나치게 한곳에 집약되어 있거나 너무 많은 의미를 포함하고 있거나 이질적인 요소들이 같이 모여 있는 경우를 의미
홀쭉
프로그램 요소의 의미나 기능이 지나치게 빈약하여 독립적으로 존재할 필요가 없는 경우를 의미
수정 -> 테스트 -> 수정 -> 테스트...
소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것
퍼포먼스 최적화는 종종 코드를 어렵게 만든다. 하지만 필요한 퍼포먼스를 얻기 위해서는 그렇게 해야 한다.
리팩토링은 소프트웨어 디자인을 개선 시킨다.
리팩토링은 소프트웨어를 더 이해하기 쉽게 만든다.
리팩토링은 버그를 찾도록 도와준다.
리팩토링은 프로그램을 빨리 작성하도록 도와준다.
기능을 추가할때 리팩토링을 하라
버그를 수정해야할때 리팩토링을 하라
코드 검토를 할때 리팩토링을 하라
리팩토리링은 그냥 지금 고치면 된다.
더 참고 URL : 리팩토링 간단한 정리
'나만의 작업' 카테고리의 다른 글
| Safari 3.0 for Windows를 맛본 후 (6) | 2007/07/04 |
|---|---|
| Enable the Debug menu in Safari 3.0 for Windows (2) | 2007/07/03 |
| Java 성능개선을 위한 Programming 기법 (7) | 2007/06/27 |
| awt와 swing의 차이점 (6) | 2007/06/19 |
| Refactoring (2) | 2007/06/18 |
| 트래픽초과의 압박으로 티스토리로 이전하였습니다. (10) | 2007/06/16 |
| 웹표준을 위한 CSS (4) | 2007/06/15 |
| [디자인패턴] bridge & adapter & mediator pattern (2) | 2007/06/13 |
| [디자인패턴] State, Strategy Pattern (6) | 2007/05/30 |
-
2007/06/19 15:53 [Edit/Del] [Reply]전 다른 사람이 코딩한 것을 봤을때, 중복도 용서가 되고, 뚱뚱도 용서가 되고, 홀쭉도 용서가 되지만 알수없는 기이한 코딩에 대한 주석이 없을때의 슬픔은 ㅠㅠ
주석 달고 삽시다!
객체지향 프로그래밍.
Posted at 2007/05/13 03:57// Posted in 나만의 작업1장부터 제가 객체지향에 대해 모르고 있었단 생각이 확 들었습니다.
절차지향적인 C와 객체지향적인 Java의 코드를 비교해주니, 쏙! 들어옵니다.
책의 내용 발취.
객체 지향 방식에는 데이터와 함수가 객체안으로 함께 캡슐화된다는 특징이 있다.
데이터는 속성이 되고 그것을 다루는 함수는 메소드가 된다.
속성에 있는 데이터만으로 제대로 작업을 해내지 못하면 필요한 데이터를 메소드의 인자값으로 받는다.
프로그램은 객체로 구성되며 그들의 내부 데이터인 속성은 외부에 직접적으로 노출되지 않는다.
객체들은 서로의 메소드를 호출하며 원하는 기능을 수행한다.
각 객체는 자기가 수행하는 작업에 책임을 지며 다른 객체의 작업을 돕는 서비스를 한다.
객체지향 코드는 "책임"을 가진 주체인 객체(object)가 상태(state)를 갖고 명령을 주고 받으며 수행한다.
절차 프로그래밍에서 함수들은 특정한 누군가에게 책임을 갖지 않는다.
단지 자신한테 넘어오는 데이터를 처리할 뿐이다.
하지만 객체는 자신을 사용하는 누군가에게 책임을 갖는다.
객체는 내부적으로 상태 정보를 갖고 그 정보에 근거하여 넘어오는 데이터는 메소드가 처리한다.
절차 지향 방식과 달리 객체들은 내부에 속성의 형태로 기반 데이터를 저장하여 상태 정보를 유지하기 때문에 메소드를 사용할 때 마다 기반 데이터를 공급하지 않아도 된다.
참고 URL
객체 지향 프로그래밍과 비 객체지향 프로그래밍의 차이
http://www.owlnet.rice.edu/~comp212/99-fall/handouts/week1/person/
'나만의 작업' 카테고리의 다른 글
| [디자인패턴] State, Strategy Pattern (6) | 2007/05/30 |
|---|---|
| 고슴도치플러스의 서비스 홍보... (4) | 2007/05/22 |
| Rss 주소 바꾸었습니다~ (12) | 2007/05/16 |
| 저도 Mac!을 씁니다. (4) | 2007/05/13 |
| 객체지향 프로그래밍. (0) | 2007/05/13 |
| Huffman algorithm(호프만 알고리즘) (8) | 2007/05/07 |
| OpenID 서버가,, 죽으면,, (16) | 2007/05/04 |
| firefox에서 원격 블로깅하기 (14) | 2007/04/15 |
| google에서의 flyburi를... (7) | 2007/04/12 |
[java] java.util.Properties 클래스
Posted at 2007/05/10 03:15// Posted in 나만의 작업/Javajava.util.Properties 클래스
* 환경설정 정보를 하드코딩하지 않고 외부파일을 이용하여 설정할때 사용한다.
InputStream is = ...
Properties props = new Properties();
try {
props.load(is);
}
....이와 같이 사용한다.
* 좀더 효율적인 방안
org.apache.commons.configuration.AbstractFileConfiguration.FileChangedReloadingStrategy
org.apache.commons.configuration.reloading.FileChangedReloadingStrategy
props = new PropertiesConfiguration(CONFIG_NAME);
props.setReloadingStrategy(new FileChangedReloadingStrategy());
출처 : 리눅스를 향하여(http://blog.naver.com/hq606fas?Redirect=Log&logNo=90011099513)
이것 덕분에 삽질한 밤...
'나만의 작업 > Java' 카테고리의 다른 글
| [Effective Java] 9. equals 메소드를 오버라이드 할 땐 hashCode 메소드도 항상 오버라이드 하자. (0) | 2009/09/28 |
|---|---|
| [Effective Java] 8. equals 메소드를 오버라이딩 할 때는 보편적 계약을 따르자. (3) | 2009/09/24 |
| [Effective Java] 5. 불필요한 객체 생성을 피하자 (4) | 2009/09/23 |
| [Effective Java] 4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자 (0) | 2009/09/17 |
| Eclipse Galileo에 어떤 프로젝트가 있을까? (2) | 2009/08/26 |
| [Effective Java] 3. private 생성자나 enum 타입을 사용해서 싱글톤의 특성을 유지하자. (2) | 2009/08/26 |
| [Effective Java] 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자. (2) | 2009/07/31 |
| [Java] 자바 코딩하다가 실수하는 부분들 (8) | 2008/03/03 |
| [java] java.util.Properties 클래스 (4) | 2007/05/10 |
-
2007/05/10 09:11 [Edit/Del] [Reply]아파치 COMMON을 사용하면 파일 변경 시에 자동으로 프로퍼티를 다시 읽을 수 있나보군요... 알아두면 좋은 팁이네요 ^^
-
2007/05/11 00:53 [Edit/Del]apache commons엔 참 좋은 것들이 많이 있는것 같아요
모르면,, 손발 머리가 고생하니 열심히 공부해야할것 같아요..^^
-
-
Huffman algorithm(호프만 알고리즘)
Posted at 2007/05/07 01:47// Posted in 나만의 작업저는 C/C++에 많은 관심을 가져보지도 않고, 특히나 응용 프로그램은 많이 안해봐서
작년에 압축은 어떻게 되는것일까, 의문이 든적이 있었습니다.
그때 아는분께 여쭈었더니, 가장 빈도수가 높은 기호를 가장 적은 비트로 표현하여 압축을 한다고 대충 들었습니다.
그땐 이 알고리즘인지 몰랐는데, 그 알고리즘이 호프만 알고리즘이었는지 이제 알았습니다.
쉬워보이는듯 하면서 트리로 가니깐 복잡해 보이는 알고리즘.
이번에 자바로 한번 짜볼려고 하는데 C/C++ 자료는 많은데 자바는 없네요..
저에겐 마냥 어렵네요..ㅎㅎ
- 자주 사용되는 문자는 짧은 코드를, 자주 사용하지 않는 문자는 긴 코드를 지정
실제 평균 문자 코드 길이를 줄여 압축하는 방법
Making binary codes from probabilities
We have a text like "aaabc", with the probabilities you can see below. Because we can output bits, what about if we make a binary decision? the most probable or the rest, 0 or 1. In our example, 0 for 'a', then 1 for the rest, 'b' and 'c', and then we have to choose again: 0 for 'b' and 1 for 'c'. Using that codes we can output "01001110" and the decoder will correctly decode "abacb". That is because the codes have the prefix property and also are instantaneously decodable. Notice too that they are close to the entropy.
| Symbol | Probability | Code | Entropy (ideal code length) |
| a | 3/5 | 0 (1 bit) | 0.737 bits |
| b | 1/5 | 10 (2 bits) | 2.322 bits |
| c | 1/5 | 11 (2 bits) | 2.322 bits |
Because we are doing a binary decision, we could represent it with a binary tree. A binary tree is a data structure, whose shape is like a tree (but upside down). It has an starting node called root. The root has two children (pointers to two other nodes), in our case we assign 0 to one child and 1 to the other. If a node has no child it's called a leaf, here it is where there are the symbols. In the example you can see the probability of the node in brackets.
참고 :
http://www.arturocampos.com/cp_ch3-1.html#Making%20binary%20codes%20from%20probabilities
'나만의 작업' 카테고리의 다른 글
| 고슴도치플러스의 서비스 홍보... (4) | 2007/05/22 |
|---|---|
| Rss 주소 바꾸었습니다~ (12) | 2007/05/16 |
| 저도 Mac!을 씁니다. (4) | 2007/05/13 |
| 객체지향 프로그래밍. (0) | 2007/05/13 |
| Huffman algorithm(호프만 알고리즘) (8) | 2007/05/07 |
| OpenID 서버가,, 죽으면,, (16) | 2007/05/04 |
| firefox에서 원격 블로깅하기 (14) | 2007/04/15 |
| google에서의 flyburi를... (7) | 2007/04/12 |
| 스프링노트공간에 제 노트를 하나 마련했습니다. (12) | 2007/04/08 |
-
-
2007/05/07 18:09 [Edit/Del] [Reply]http://en.wikipedia.org/wiki/Huffman_coding
위키를 애용해보세요~ ㅋㅋ
http://apollonic.net/code/
여기에 자바 코드가 있네요. 제대로 돌아가는지는 모르겠지만요. ㅎㅎ -
Belle2009/11/14 02:47 [Edit/Del] [Reply]저도 다 까먹어서 아무것도 머릿속에 남아있는게 없지만..
알고리즘, 컴파일러, 이산수학 등등은 아주 재미있었던거 같습니다. 흥미앞에 노력도 무너진다고 하니 열심히 재미를 가지고 다가서보세요~ -
Head First Java 저자와의 인터뷰
Posted at 2006/11/25 20:17// Posted in 내가 바라는 나요즘은 Head First Java 책을 보며 매일 감탄을 한다.
이 책을 다 보고서는 Servlet&JSP 책을 볼 것이다.
자바에 대해 몇년째 배우고 있고, 아직도 모르는게 너무 많고
API중에서 아직도 한번도 써보지 못한 클래스나 메소드가 너무 많다.
(물론 다 써야하는건 아니지만,)
내가 원하는 프로그램을 생각했을때 메소드를 두번 구현하지 않기 위해서(나 편하라구,,)
가장 와닿는 인터뷰 내용중,
공부를 재미있게 하는법, 수동적인 학습이 아니라 능동적으로 생각하고 연습을 해야한다.
뇌와 관련하여 한 가지 또 중요한 점은 몸을 만들기 위해서 운동을 해야 하는 것과 마찬가지로 뇌에 대해서도 훈련이 필요하다는 점입니다. 수동적인 학습(실제 머리를 쓰지 않으면서 읽거나 듣기만 하는 것)은 다른 사람이 체육관에서 열심히 역기를 드는 것을 구경하기만 하는 것과 똑같습니다. 근육을 움직이지 않고는 근육이 더 강력해지기를 바라면 안 될 것입니다. 뇌에 대해서도 마찬가지입니다. 능동적으로 생각을 하고 연습을 해야만 합니다.
뭔가를 읽고 나서 완전히 이해했다고 생각했는데 누군가로부터 그 내용에 관한 질문을 받고 나서 그런 믿음이 무참히 깨진 경험을 해 본 사람들이 많이 있을 것입니다. 이런 경우에는 두 가지 일을 해야 합니다. 그 내용에 대해 생각해보고 소리 내어 말을 해야 하지요. 같은 내용을 여러 번 읽는 것보다는 소리 내어 말해보는 것이 학습 효과 면에서 더 좋은 경우가 많이 있습니다. 무엇이든 내용을 더 깊이 처리하도록 강요 받게 되면 우리 뇌에서 어떤 연관 관계가 맺어지고, 그 관계가 더욱 강화되는데, 바로 그런 것이 학습에 도움이 되지요. 사실 단순히 우리 뇌에서 더 많은 관심을 기울이도록 하는 것은 첫 번째 단계에 불과합니다. 그 뒤에는 어떤 연습이라든가 까다로운 질문, 놀라운 결과 등을 통해서 주어진 내용에 대해 더 깊이 생각을 하는 단계가 필요합니다.
Q: 사람들이 프로그래밍 언어를 배우려고 할 때 저지르는 가장 큰 실수는 무엇이라고 생각하시는지요?
A: 자신의 머리가 어떤 식으로 돌아가는지 충분히 알지 못한다는 것입니다. 배우는 사람 입장에서 가장 기본적인 것 ? "뭔가를 느끼지 못한다면 우리 뇌에서는 굳이 그 내용을 기억해두려 하지 않는다" 라는 문장으로 정리할 수 있습니다. ? 만 알아도 학습 효율을 크게 향상시킬 수 있습니다. 각자 자신의 머리를 속여서 지금 공부하고 있는 내용이 중요하다고 믿게 만드는 방법을 만들 수 있을 것입니다. 두뇌를 활발하게 움직이도록 만들 수만 있다면 어떤 것이든 도움이 됩니다.
우리가 적용할 수 있는 방법은 상당히 다양합니다. 엄청나게 재미없는 내용도 잘만 하면 뇌에서 중요한 의미를 가지는 것으로 인식하도록 만들 수 있지요.
일단 맨 처음에는 참여하는 것 ? 단순하게 읽거나 듣는 것과 반대되는 것 ? 만으로도 상황이 크게 달라집니다.
'내가 바라는 나' 카테고리의 다른 글
| 얼마만큼 열어야 하는지.. (7) | 2007/02/07 |
|---|---|
| 2007년을 맞이하며,,,, (10) | 2006/12/31 |
| 세상에서 가장 짧고 슬픈말 (9) | 2006/11/30 |
| 엄마 (10) | 2006/11/27 |
| Head First Java 저자와의 인터뷰 (4) | 2006/11/25 |
| 꿈... 계획... 실행 (2) | 2006/11/25 |
| 이야기는 계속 되어져야 한다 (0) | 2006/11/03 |
| 나는 어디로 가고 싶은가? (0) | 2006/11/02 |
| 한국 CEO100인의 좌우명 (0) | 2006/10/27 |
-
2006/11/25 22:02 [Edit/Del] [Reply]Head First Java 책은 잘 보셨나요? ^^
전 SCWCD 시험때문에 Head First Servlet & JSP 책을 원서로 봤는데
(저 원서 보고 나서 한 몇개월 지난 다음에 번역본이 나오더라구요... 아깝...)
해석하면서 읽느라 자동으로 집중이 된 것도 좀 있긴 하지만,
책 구성이라던지 내용 자체가 정말 머리에 잘 들어올 수 있도록 되어 있더라구요.
이런 책 구성은 유래가 없었다고 해도 과언이 아닌듯한...
특히 SCWCD 시험 보실 생각이 있으시면 꼭 사서 보세요~
(왠지 책 장사꾼이 된 듯한...-_-;;
-
2006/11/27 16:25 [Edit/Del]^^일찍 책을 사셨나봐요~
원서로 봐도 그림이 많이 있으니,
썩~ 괜찮을 것 같은데요~
그림을 보고 이해한다는게 이 책의 장점이니
어느덧 chapter14까지 봤답니다.
이제 두 chapter만 보면 목표 달성!!
전,,SCJP먼저 따야겠어요,,ㅠㅠ ^^
-
-
2006/11/27 12:56 [Edit/Del] [Reply]이책 재밋죠... 전 그냥 이야기 책처럼 읽었는데 머리로 알고 잇던걸 몸으로 이해하게 만드는 거 같아요. 이를테면 머릿속의 공식을 어떻게 적용시켜야될질 알았다고 할까?
레퍼런스 책들은 많은 데 정작 그걸 사용하기 위한 원리를 알려주는 책은 많이 않잖아요. 바로 그런 책인 거 같아요.-
2006/11/27 16:26 [Edit/Del]이 책은 공식이나 코딩보다는 원리에 출중해서,!!
머리굴리기 연습하기에 정말 좋은것 같아요.
그동안 제가 얼마나 주어진것만 받아들이고 살았는지,
의문점은 생각하지 않으며 공부했는지 뼈저리게
반성하고 있답니다.^^
-
이올린에 북마크하기
이올린에 추천하기





이클립스.. 오랫만에 본다+_+
잘 지내고 있지? 환절기 감기 조심하구~ (신종플루보다 독감이 더 무서워...^^)
행복한 11월 맞이하렴~
밋첼님두 감기 조심하세요~~~ㅋㅋㅋㅋ