본문 바로가기

Java

Domain Class toString 메서드 많은 필드를 가지고 있는 Domain 클래스에서 toString 메서드를 만들 때.. effective java에서도 toString 메서드는 가급적 override하고 의미있는 값을 볼 수 있도록 하라고 하죠.. 그런데 필드가 굉장히 많을 경우 그 필드들이 추가되고 삭제 될 때마다 이것을 toString 메서드에 반영하는 것이 번거롭고 그래서.. 그냥 꼼수를 부려봤습니다. 일단.. 현재 진행중인 프로젝트가 spring 프레임워크를 사용하고 있어서 거기서 제공되는 클래스들을 활용했습니다. 가지고 있는 필드에 대해서 기본적으로 필드명 = 값 이런식으로 toString 메서드를 통해 찍어내도록 해봤습니다. 더 좋은 방법도 있겠지만.. 일단 이렇게 해놓으니.. 로그보기는 편해지네요..ㅎㅎ spring 기반이 .. 더보기
스택과 힙 책에서 본 내용인데.. 자꾸 까먹는다. 기본적인 내용만 들어있어서 어렵지 않은 내용인데.. 왜 자꾸 까먹지 -_-; 자바를 쓸 때 우리가 관심을 가져야 할 두가지 메모리 공간을 다루는데.. 힙과 스택이 있다. 하나는 객체가 존재하는 곳이고 (힙) 하나는 메소드 호출과 지역변수가 있는 곳 (스택)이다.. 인스턴스 변수는 객체 안에 존재하지만 (물론 레퍼런스만 가지고 있다..) 메서드안에서 선언한 지역 변수는 (매개 변수 포함) 메소드가 스택에 있는 동안만 존재한다. 메소드를 호출하면 그 메소드는 호출 스택에 차례대로 쌓이는데 거기에 지역 변수를 포함한 메소드의 상태가 들어있다. 만약 선언된 지역변수가 객체 레퍼런스 변수라면 스택에는 변수(레퍼런스를 참조하고 있는)만 존재하고 실제 그 변수가 참조하고 있는 .. 더보기
Java clone()에 대한 예제 하나만 더 http://www.codeguru.com/java/tij/tij0127.shtml 여기에 있는 예제입니다. 포스트를 작성하고나서 풍대리님이 url을 보내주셔서 한번 보았는데 예제가 참 좋습니다. 그중 하나면 여기다 올려보겠습니다. //: Snake.java // Tests cloning to see if destination of // handles are also cloned. public class Snake implements Cloneable { private Snake next; private char c; // Value of i == number of segments Snake(int i, char x) { c = x; if(--i > 0) next = new Snake(i, (char)(.. 더보기
[Java] Object.clone() 요즘 머리가 터질 것 같습니다 --; Object 클래스에 clone() 메서드가 protected로 정의 되어있습니다. native 메서드입니다. 기본적으로는 메모리를 복사한다고 합니다. clone()을 지원하려면 그 클래스는 Cloneable 인터페이스를 implements 해야 합니다. 하지만, 우리가 일반적으로 알고있는 것과는 다르게 Cloneable 인터페이스에는 아무런 메서드도 정의되어 있지 않습니다. 제가 처음에 clone()에 대해서 굉장히 헷갈렸던 부분입니다. 일단, clone()을 지원하지 않을 거라면, 상관없고...clone()을 지원 할 클래스라면 Object 클래스에 정의 되어있는 protected Object clone() 메서드를 public으로 재정의 해서 사용해야 합니다. .. 더보기
Class.getResource() 와 ClassLoader.getResource() http://www.javaworld.com/javaworld/javaqa/2002-11/02-qa-1122-resources.html 이곳에 올라와있는 질문과 답변입니다. 어제 이거 때문에 몇시간을 헤매다가 발견한 자료인데.. 살짝 번역을 해서 정리해 놓으려고 합니다. 질문은 Class.getResource() 와 ClassLoader.getResource()의 차이점이 뭔가요? 입니다. 답변입니다. Class.getResource()는 결국 ClassLoader.getResource()에 위임(delegates) 하게 됩니다. 때문에 두개의 메소드는 실제로 매우 비슷합니다. 하지만, 첫번째 메서드가 좀 더 좋습니다(preferable). 이것은 추가적인 멋진 특징들을 가지고 있습니다. 이것은 pack.. 더보기
String에 대해서 다음의 코드를 보겠습니다~ public class Test { public static void main(String[] args) { String a = "123"; String b = "123"; String a1 = new String("123"); String b1 = new String("123"); String a2 = String.valueOf("123"); String b2 = String.valueOf("123"); String a3 = "1"+"2"+"3"; String b3 = "123"; System.out.println(a==b); System.out.println(a1==b1); System.out.println(a2==b2); System.out.println(a3==b3); .. 더보기
상위 클래스와 하위 클래스의 멤버 공유 간단한 것 이지만.. 코딩하다가 문득 한번 테스트 해보고 싶어져서 해봤습니다. 최상위 클래스 public class SuperClass { List list1 = new ArrayList(); static List staticList = new ArrayList(); } 하위클래스1 public class SubClass1 extends SuperClass { } 하위클래스2 public class SubClass2 extends SuperClass { } public static void main(String[] args) { SuperClass sb1 = new SubClass1(); SuperClass sb2 = new SubClass2(); SuperClass sb3 = new SubClass3(.. 더보기
Set에서 Sort를 하기위한 Comparable구현 그리고 InnerClass의 사용 마땅히 제목이 떠오르는게 없네요...^^; 오늘 코딩을 하다가 설계에 대해 모르는 것을 풍대리님께 물어물어 가다가 알게 된 사실...^^; 집에 돌아와서 다시 기억을 더듬어서 코딩을 해보고 이렇게 정리를해봅니다. 1. Set collection과 Comparable 인터페이스. Set collection에 add로써 추가되는 객체는 Comparable 인터페이스를 구현하고 있어야합니다. 이것을 기본으로하여 Set collection에 추가되는 객체들은 순서대로 정렬되게 됩니다. 물론, 정렬순서는 각 객체에서 구현하고 있는 compareTo(Object o) 에 따라 달라질겁니다. public class Test3 { public static void main(String[] args) { Set a = .. 더보기
JDK5 에서의 @override Annotation. 프로젝트를 하기 위해 로컬 환경을 JDK6으로 잡아놓고 어느정도 개발을 진행하던 중 다시 환경이 바뀌어서 JDK5로.. -_-; 일단 , JDK만 바꿔주었더니 여기저기서 에러가 뜨기 시작했다. 이게 뭔일이여... 하고 봤더니 @override 여기서 죄다 문제가 생기고 있었다. 분명 1.5에서도 어노테이션은 지원을하고 있고 어떤 @override는 에러가 뜨지 않는데.. 유독 몇몇 클래스에서만 컴파일 에러를 발생시키고 있기 때문에 뭔가 하고 찾아보았다. 보니까.. @override를 어노테이션을 지원하기는 하는데 super class에 대해서만 지원을 한다. 즉 interface에서는 지원을 하지 않는다... 그래서 , interface를 구현하고 있는 하위클래스에서 저 어노테이션을 오버라이드해서 구현하.. 더보기
[Stream] ObjectInputStream, ObjectOutputStream. 객체를 주고 받기 위함. 당연히 객체는 Serializable를 implements 하고 있어야 한다. 어? 어디서 많이 보던건데? 하고 생각하셨다면 바로 보통 여러 서적에 나와있는 RMI이다. 객체를 주고받기 위해 직렬화 시키고 직렬화를 위해서 Serializable을 implements 하는 것.. 결국 다시 얘기하면 직렬화는 스트림을 통해 객체를 주고 받기 위한 작업인 것이다. (라고 김풍주대리님께서 가르쳐주셨다. ㅎㅎㅎ) 결국 위의 스트림을 이용하면, RMI와 비슷한 역할을 하는 녀석도 만들어 낼 수 있다. (실제로 풍대리님께서 만들어보이셨음..-_-b 그것은 나중에 다시...) 우선 소스를 보면 전달 대상이 되는 객체는 public class ObjectStreamSampleData implem.. 더보기