본문 바로가기

Programming

(123)
java : 구성(composition)과 위임(delegation) 구성, 위임 등은 headfirst OOA&D 에서 자주 상기되던 개념입니다. 구성이라는 것은 클래스가 다른 클래스를 인스턴스 변수로 가진다는 의미로 보실 수 있으며 위임은 클라이언트 코드에서 구성하고 있는 인스턴스 변수 객체(말이 어렵네요. 참조객체라고 하면 쉬울까요 ㅎㅎ;) 를 통하여 메소드 호출 등을 말하는 것입니다. 아마 수개월전에 headfirst OOA&D 학습하면서 끄적였던 것 같은데 이 주제를 다시 또 다루는 이유는 요즘 보고 있는 책에서 꽤 강하게 주장하고 있어서 적습니다. 서적 이름은 thinking in java라는 서적인데, 모두 읽은 것은 아니지만 headfirst java + OOA&D 느낌이 좀 있네요. headfirst 시리즈가 쉬운 용어들과 재밌는 사진들을 이용해서 거부감을..
자료구조 : binary tree에서 전위, 중위, 후위 계산 아~~주 쉽게하는 법 후배가 물어보길래 적어봅니다. 뭐.. 다들 같은 방법으로 계산하리라 생각합니다만^^;;; 아마 거의 모든 학교나 강의에서는 binary tree 의 노드를 둥근 모형 정도로 그리고 노드와 노드를 선으로 연결했을겁니다. 전위 .. 각 노드마다 - 이렇게 선같은걸 좌측에 그려주세요. 중위 .. 각 노드마다 위 선을 아래에 세워서 그려주세요. 후위 .. 각 노드마다 마찬가지로 선을 우측에 그려주세요. 그리고 시작점은 늘 루트노드의 위에서 시작하고 방향은 좌측입니다. 그려나가면서 저 선들이 통과하는 순서가 각 순회의 순서와 동일합니다. 예전에 이거 소개받고 며칠씩 밥을 샀는데... 알고보니 여기저기 다들 알고 있던 방법이었더군요 ㅠㅠ 밑의 못난 그림은 이해를 돕기 위해 전위 순회 경우를 그려본 것입니다^^;; ..
java : JVM의 메모리 구조. 관련해서 한두번 글을 올린 적이 있는데 가장 기초의 JVM 메모리구조를 다시 작성해볼까 합니다. 그림에서 볼 수 있듯이 자바 가상 머신은(JVM) 클래스 영역, 자바 스택 영역, 힙 영역, 네이티브 메소드 스택 영역으로 구성되어있습니다. 각 영역은 밑과 같은 공간으로 쓰입니다. 클래스 영역 실행에 필요한 클래스들을 로드하여 저장하는 공간으로서 로드된 클래스의 메소드들은 메소드 영역에, 상수들은 상수 영역에 저장이 됩니다. 자바 스택 영역 자바 프로그램을 수행하면서 발생하는 메소드 호출과 복귀에 대한 정보를 생성하여 저장하는 영역인데 Throwable 객체가 생성시에 이 영역에 대한 내용을 복사합니다.(exception 들의 가장 상위 클래스) JVM 수행도중에 발생되는 exception들의 printSt..
[링크] eclipse에 RMI 플러그인 설치하고 테스트환경 만들기. RMI(Remote Method Invocation)는 로컬에 있는 JVM이 아닌 외부의 JVM에서 관리하고 있는 heap 메모리의 객체에 접근하고 메소드를 호출할 수 있는 기능입니다. 아래 링크는 이클립스에 RMI 환경을 갖추는 것에 대해 잘 설명되어있습니다. (실제 플러그인 설치까지는 아래 링크에서 링크걸어놓은 사이트로 접속해야하지만 ^^;) http://blog.bagesoft.com/646
java : Generic - 와일드카드 public void takeAnimals(ArrayList animals) { for(Animal animal : animals){ animal.eat(); } } 메소드에서 인자값으로 Generic (유형매개변수) 을 사용시에는 다형성이 허용되지 않습니다. 즉, 위에서 보는 것과 같은 메소드는 인자로 반드시 ArrayList 타입만 허용됩니다. 만약 Animal 을 상속받는 Human, Lion, Tiger 같은 클래스들만 모아두고 generic 을 각개로 선언했다면 저 메소드를 호출하면서 사용할 수 있는 파라미터가 되지 못합니다. (ArrayList, ArrayList, ArrayList 등을 파라미터로 쓰질 못한다는 것입니다. 세 클래스 모두 Animal을 extends 하고 있다 하더라도 말이죠..
java : 강력한 형 안정성 기술. generic 우선 generic 이란 개념을 사용할 때 저같은 초보자들을 대상으로 설명하자면. 자료구조의 컬렉션을 사용할 때 쓰이는 type 강제성 기술입니다. ArrayList al = new ArrayList(); 위와 같이 말이죠. 위처럼 선언한 ArrayList 자료구조는 String type의 객체만 배열의 멤버들로 사용할 수 있습니다. (멤버라는 표현이 옳은지는 모르겠네요. 요소, element가 더 정확한 표현이겠지만 편의상 멤버라고 할게요 ㅎㅎ;) 변수 al은 generic을 통해 String으로만 이루어진 자료구조라고 선언되어졌습니다. 이렇게 된다면 public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable,..
java : 프로그래머들의 너저분한 코딩을 막아주기 위한 센스. package JDK 1.4부터 권고사항에서 강제사항으로 바뀐 것들 중 하나가 default package의 class 들을 더이상 다른 package에서 import할 수 없는 것입니다. 웹서핑하다 보게된 건데요, 이유는 클래스들의 같은 이름의 충돌을 방지하기 위한거라네요. 패키지와 클래스, 메소드들. 이름만으로 각 기능들과 역할에 대해 이해하기 쉽도록 코딩하라고 마련된 배려일까요 ㅎㅎ
[링크] eclipse에서 F3 키 혹은 ctrl+마우스 좌클릭하여 jre 클래스파일이 아닌 java소스로 접근하기. java 프로그래밍을 하다보면 원천 소스자체가 궁금할 적도, 알아야할 필요가 있을적도 있습니다. 이클립스 설치시 별다른 설정을 안잡아주셨다면 아마 해당 클래스(자바) 파일을 쫓아가는 키들을 사용하였을 때 attach source라는 버튼과 함께 인터페이스같은 것만 보여주는 화면을 보게되실 것입니다. 이것은 이클립스 설치시 자동으로 jar파일 위치를 잡으면서 jre의 class 파일들만 물고 있기 때문입니다. 따라서 java 소스를 보기 위해서는 별도의 설정작업이 필요합니다. JDK를 설치하셨다면 JDK 설치폴더 내에 src.zip 파일이 보일 것입니다. 이 zip파일이 java 소스들이 압축되어있는 파일입니다. attach source란 이 zip파일 내에 압축되어있는 java 파일들을 attach하라는..