본문 바로가기

자바

제 8회 공감 세미나 후기 지난 6월 23일에 제 8회 공감 세미나를 다녀왔습니다.오늘은 그 내용을 공유하고자 이렇게 글을 씁니다. 진행된 세션은 아래와 같습니다.Java SE와 EE의 미래Sencha Touch 클라우드, Sencha.io포스트모템으로 살펴보는 위대한 게임 개발팀의 특징node.js의 의미와 자바의 대안원래 예정되었던 순서와는 약간 다르게 진행되었는데요,, 뭐 어차피 저는 처음부터 끝까지 다 들을 생각이라서 별 상관은 없었어요~ㅎ 등록이번 세미나는 강남 교보타워에서 열렸는데요, 늦을 줄 알고 조금 서둘렀더니 엄청 빨리 도착해버렸답니다.^^;; 덕분에 책도 한권 얻었어요~ㅎㅎㅎ Gamification에 관련된 책인데요, 안그래도 이 분야에 대해 많이 알고 싶어하고 관심을 가져오고 있었는데, 이렇게 좋은 책을 얻게되.. 더보기
함수의 원자성(atomicity) 보장 멀티 쓰레드(multi-thread) 기반의 프로그래밍을 하게 되면 중요한 것이 바로 원자성의 보장이다. 그렇다면 원자성이 무엇인가? 원자성이란 여러개의 쓰레드가 있을 때 특정 시점에 어떤 메소드를 두개 이상의 쓰레드가 동시에 호출 못한다는 것이다. 간단한 예를 들어보자. class Job implements Runnable { public void run() { while(true) { go(); stop(); } } public void go() { /* 매우 중요한 작업이다 */ } public void stop() { /* 그냥 일반적인 작업이다. */ } } 위의 Job 클래스를 보면 run()메소드에서 go()와 stop()메소드를 무한 호출하고 있다. 그런데 여기에서 go()메소드가 아주 중.. 더보기
자바에서 쓰레드를 사용하는 방법 자바를 이용해서 프로젝트를 진행하면 사용하는 클래스에 대해서는 거의 모르는 게 없게 된다. 하지만 프로젝트를 할 때에는 잘하다가도 손 놓으면 잊어버리게 되는 것 중 하나가 바로 쓰레드를 사용하는 것이다. 그래서 오늘은 쓰레드를 사용하는 방법에 대해 정리해 보자. 먼저 쓰레드를 사용하기 위해서는 Runnable 인터페이스와 Thread 클래스가 필요하다. Thread 클래스는 새로운 작업을 맡게되는 일꾼이라고 생각하면 되고, Runnable 인터페이스를 구현하는 객체가 실질적인 일이 되겠다. 또 Runnable 인터페이스를 구현하는 클래스는 run()함수에 쓰레드에서 작업할 일을 넣으면 된다. 그렇다면 간단한 예제를 살펴보도록 하자. public class Job implements Runnable { p.. 더보기
자바 - 직렬화 (Serializable) 자바에서는 객체를 손쉽게 저장하거나 전송할 수 있는데, 이를 가능하게 하는 기술이 바로 직렬화입니다. 원래 객체는 힙 안에 존재하게 되는데 직렬화를 하게 되면 그 모양이 약간 변형되게 됩니다. 이렇게 하게 되면 자바에서 저장 및 전송에 아주 편리하고 유리하다는 장점이 있지만, 동시에 다른 프로그램에서는 이를 분석하기 힘들다는 단점이 있습니다. (물론 직렬화를 통해 어떤식으로 변형이 되는지 그 원리만 잘 알고 있다면 다른 프로그램에서도 얼마든지 읽고 쓰는 것이 가능할 것입니다.) 1.Serializable 직렬화를 하기 위해서는 저장하거나 전송할 객체에 Serializable이라는 인터페이스를 구현해 주어야 합니다. 이 Serializable 인터페이스는 구현할 메소드가 하나도 없기 때문에 그냥 imple.. 더보기
스택과 힙 1. 스택(Stack) 스택은 지역변수(메소드 내에 존재하는 변수, 메소드의 인자)가 존재하는 공간이다. 메소드를 호출하면 호출 스택(call stack)의 맨 위에 stack frame(코드, 지역 변수 값)이 쌓이게 된다. 함수호출이 끝나야만 호출 스택에서 해당 스택 프레임을 pop하게 된다. 2. 힙(Heap) 힙은 객체가 존재하는 공간이고, 당연히 인스턴스 변수(클래스 내에 선언되어 있는 변수)도 이 안에 존재한다. 여기에서 힙은 일반적인 힙과는 약간 다르다. 왜냐하면 garbage collection을 하는 힙이기 때문이다. *만약 메소드 내에서 객체를 생성하면 이는 스택에 들어갈까? 아니면 힙에 들어갈까? 객체가 생성되면 무조건 힙에 생성된다. 그리고 primitive 타입의 변수(int, f.. 더보기