본문 바로가기

전체 글

(133)
아이템 83: 지연 초기화는 신중히 사용하라 지연 초기화 public class FileUtil { private File oldfile = new File("oldfile"); ... } 여기 FileUtil 클래스가 있다. 이 클래스의 oldfile 필드가 프로그램이 100번 실행될 때 한 번 사용될 까 말까하는 필드라면 어떨까? 100번 실행되는 동안 사용하지도 않을 oldfile을 계속 불러와서 초기화 할 것이고 이는 명백한 리소스 낭비이다. 지연 초기화는 위와 같은 문제에 대한 해답이 될 수 있다. 자주 사용되지 않는 필드를 프로그램이 시작할 때가 아니라 비로소 사용될 때 초기화 하는 것이다. public class OldFileUtil { private File oldfile = null; ... public File getOldFile..
아이템 82: 스레드 안정성 수준을 문서화하라 스레드 안정성 문서화 클래스를 개발할 때, 해당 클래스를 사용할 클라이언트들을 위하여 필요한 정보들을 주석으로 작성하여 문서화 해야한다. 아무런 설명이 없다면 클라이언트는 추측과 가정을 통해 그 클래스를 사용하게 된다. 특히 스레드 안정성에 대한 정보는 설명이 필요한 중요한 정보 중 하나이다. 스레드 안정성이 잘못되면 프로그램에 심각한 오류가 발생할 것이다. 스레드 안정성 수준 불변(immutable): 이 클래스의 인스턴스는 마치 상수와 같아서 외부 동기화가 필요없다. 무조건적 스레드 안전(unconditionally thread-safe): 이 클래스의 인스턴스는 수정될 수 있으나, 내부에서 충실히 동기화하여 별도의 외부 동기화 없이 동시에 사용해도 안전하다. 조건부 스레드 안전(conditional..
아이템 81: 동시성 유틸리티를 애용하라 wait와 notify public class Main { public synchronized void waitMehod() throws InterruptedException { System.out.println(Thread.currentThread().getId() + " wait"); wait(); System.out.println(Thread.currentThread().getId() + " notified"); } public synchronized void notifyMethod() throws InterruptedException { System.out.println(Thread.currentThread().getId() + " notify all"); notifyAll(); } public ..
6. Git 브랜치2: 브랜치 관리, 리모트 브랜치, 리배이스 브랜치 관리 > git branch hotfix iss53 * master testing > git branch -v hotfix 4e14b5a fix newFunction iss53 3533c05 add newFunction * master 760e43a resolve conflict testing 7b0dbe6 fix newfile1 git branch 명령어를 통해 현재 저장소에 있는 브랜치들을 볼 수 있다. * 표시가 된 브랜치는 현재 작업대상이 브랜치라는 뜻이다. -v 옵션과 함께 하면 브랜치별 마지막 커밋 정보를 볼 수 있다. > git branch --merged hotfix iss53 * master > git branch --no-merged testing --merged와 --no-me..
5. Git 브랜치1 - 브랜치, 머지 브랜치란 개발을 하다보면 코드를 여러개로 분리하여 독립적으로 개발을 진행해야 하는 경우가 생긴다. 예를 들어 동일한 서비스라도 운영에서 배포되고 있는 코드가 있고 새로운 기능을 개발중인 코드가 있을 수 있다. Git의 브랜치는 이러한 코드의 분리와 독립적인 개발이 가능하게 해준다. > git branch *master Git 저장소를 처음 생성하면 자동적으로 master라는 브랜치가 생성된다. 그리고 새로운 커밋이 추가될때마다 master 브랜치의 포인터는 최신 커밋을 가르키도록 이동한다. > git branch testing > git branch *master testing git branch 명령어를 통해 새로운 브랜치를 생성할 수 있다. 하지만 새로운 브랜치를 추가할 뿐 여전히 작업중인 브랜치는 ..
4. Git 기초3 - 리모트 저장소, 태그 리모트 저장소 리모트 저장소란 네트워크상에 있는 저장소를 말한다. 일반적으로 프로젝트를 진행할때는 여러사람이 하나의 리모트 저장소를 기반으로 동시에 작업을 진행한다. 이번에는 이러한 리모트저장소를 관리하는 법을 알아보자. > git clone https://github.com/schacon/ticgit > cd ticgit > git remote origin > git remote -v originhttps://github.com/schacon/ticgit (fetch) originhttps://github.com/schacon/ticgit (push) ​ticgit라는 리모트 저장소를 불러왔다. 해당 폴더에 가서 git remote 명령어를 입력하면 하나의 리모트 저장소가 조회되는것을 볼 수 있다. >..
3. Git 기초2 - 커밋 히스토리, 되돌리기 커밋 히스토리 조회 > git clone https://github.com/schacon/simplegit-progit > cd simplegit-prohit > git log commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD) Author: Scott Chacon Date: Mon Mar 17 21:52:11 2008 -0700 changed the verison number commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon Date: Sat Mar 15 16:40:33 2008 -0700 removed unneces..
2. Git 기초1 - 레포지토리, 라이프사이클 레포지토리 시작하기 Git는 레포지토리 단위로 버젼관리를 한다. 레포지토리는 2가지 방법으로 쓰기 시작할 수 있다. 첫번째는 로컬 디렉토리 하나를 Git 레포지토리로 설정하여 시작는 것이다. 두번째는 다른곳에 있는 Git 레포지토리를 가져와서 사용하는 것이다. > mkdir my_project > cd my_project > git init my_project라는 폴더를 만들고 해당 폴더로 이동한 후 git init 명령어를 사용하여 해당 폴더를 Git 레포지토리로 만들었다. > git clone https://github.com/libgit2/libgit2 > ls libgit2라는 외부 레포지토리를 가져오는 명령어이다. git clone 이후 libgit2 폴더가 생성된것을 확인할 수 있다. 레포지토..