본문 바로가기

Head First Java

익스트림 프로그래밍(eXtreme Programming) 90년대 말에 등장한 개발 소프트웨어 개발 방법론으로 다양회사에서 쓰이고 있으며 XP의 가장 큰 장점은 막판에 스펙이 변경되는 일이 있어도 고객이 원하는 것을 고객이 원하는 기한에 맞춰서 제공할 수 있다고 한다. XP 쓰이는 규칙 조금씩, 하지만 자주 발표한다. 사이클을 반복해서 돌리면서 개발한다. 스펙에 없는 것은 절대 집어넣지 않는다.(아무리 그 기능이 나중에 쓰일 것 같은 느낌이 들어도 그러지 않는 것이 좋다) 테스트 코드를 먼저 만든다. 야근은 하지 마라. 항상 정규 일과 시간에만 작업한다. 기회가 생기는 족족 언제 어디서든 코드를 개선한다. 모든 테스트를 통과하기 전에는 어떤 것도 발표하지 않는다. 조금씩 발표하는 것을 기반으로 하여 현실적인 작업 계획을 마든다. 모든 일으 ㄹ단순하게 처리한다... 더보기
[Head First Java] Chapter5 SimpleDotCom(간단한 닷컴 게임) 테스트 코드 Chpater5 에서는 닷컴 가라앉히기라는 게임을 만들게 되는에 여기에서는 바로 코드를 만드는게 아니라 준비 코드를 만들고 테스트 코드를 만든 다음에 실제 코드를 완성하라고 알려주고 있다. 테스트 코드를 먼저 만들어놓은 것은 익스트림 프로그래밍의 여러 규칙 가운데 하나라고 한다. 아래와 같이 테스트 코드를 코딩하였다. SimpleDotComTestDrive 클래스 public class SimpleDotComTestDrive { public static void main(String[] args) { SimpleDotCom dot = new SimpleDotCom(); int[] locations = {2,3,4}; dot.setLocationCells(locations); String userGuess.. 더보기
[Head First Java] Chapter4 연습문제 수영장 퍼즐 코드 조각을 한번만 사용하여 아래와 같은 출력 결과를 얻어야 한다. 출력 결과 result 543345 문제 public class Puzzle4 { public static void main(String[] args) { ________________________ int y = 1; int x = 0; int result = 0; while(x < 6){ ________________ ________________ y = y * 10; ________ } x = 6; while(x > 0){ ________ result = result + ____________ } System.out.println("result " + result); } } class ________{ int ivar; ______.. 더보기
[Head First Java] Chapter4 연습문제 결과를 맞춰봅시다. 문제 소스에서 특정 부분에 코드를 대입하여 나오는 출력 결과를 알아내기. 문제 public class Mix4{ int counter = 0; public static void main(String[] args){ int count = 0; Mix4[] m4a = new Mix4[20]; int x = 0; while(_____){ m4a[x] = new Mix4(); m4a[x].counter = m4a[x].counter + 1; count = count + 1; count = count + m4a[x].maybeNew(x); x = x + 1; } System.out.println(count + " " + m4a[1].counter); } public int maybeNew(int index){ i.. 더보기
[Head First Java] Chapter4 연습문제 컴파일러가 되어봅시다. B문제 소스가 컴파일 잘 되는지 확인 원본 소스 class Clock { String time; void setTime(String t){ time = t; } void getTime(){ return time; } } class ClockTestDrive { public static void main(String[] args) { Clock c = new Clock(); c.setTime("1245"); String tod = c.getTime(); System.out.println("time: " + tod); } } 정답 class Clock { String time; void setTime(String t){ time = t; } String getTime(){ return time; } } class .. 더보기
[Head First Java] Chapter4 연습문제 컴파일러가 되어봅시다. A문제 소스가 컴파일 잘 되는지 확인 소스 public class XCopy { public static void main(String[] args){ int orig = 42; XCopy x = new XCopy(); int y = x.go(orig); System.out.println(orig + " " + y); } int go(int arg){ arg = arg * 2; return arg; } } 컴파일이 잘 된다. 출력 결과 42 84 더보기
[Head First Java] Chapter4 GoodDog 클래스 캡슐화 GoodDog 클래스 class GoodDog { private int size; public int getSize(){ return size; } public void setSize(int s){ size = s; } void bark(){ if(size > 60){ System.out.println("Wooof! Wooof!"); } else if(size > 14){ System.out.println("Ruff! Ruff!)"); } else{ System.out.println("Yip! Yip!"); } } } GoodDogTestDrive 클래스 class GoodDogTestDrive { public static void main(String[] args) { GoodDog one = new .. 더보기
[Head First Java] Chapter4 크기와 짖는 소리 Dog 클래스에는 size라는 인스턴스 변수가 있는데, bark() 메소드에서 이 값을 이용하여 짖는 소리를 결정할 수 있다.. 소스 class Dog { int size; String name; void bark(){ if(size > 60){ System.out.println("Wooof! Wooof!"); } else if(size > 14){ System.out.println("Ruff! Ruff!"); } else{ System.out.println("Yip! Yip!"); } } } public class DogTestDrive { public static void main(String[] args) { Dog one = new Dog(); one.size = 70; Dog two = new .. 더보기
[Head First Java] Chapter3 연습문제 수영장 퍼즐 코드 조각을 한번만 사용하여 아래와 같은 출력 결과를 얻어야 한다. 출력 결과 triangle 0, area = 4.0 triangle 1, area = 10.0 triangle 2, area = 18.0 triangle 3, area = 28.0 y = 4, t5 area = 343.0 코드 조각 x y area ta.area ta.x.area ta[x].area Triangel[] ta = new Triangle(4); Triangle ta = new[] Triange[4]; Triangle[] ta = new Triangle[4]; 4, t5 area = 18.0 4, t5 area = 343.0 27, t5 area = 18.0 27, t5 area = 343.0 ta[x] = setArea();.. 더보기
[Head First Java] Chapter3 연습문제 코드 자석 코드 조각을 가지고 아래와 같은 출력 결과를 가지는 코드를 만들어야 한다. 출력결과 island = Fiji island = Cozumel island = Bermuda island = Azores 코드 조각 int y = 0; ref = index[y]; islands[0] = "Bermuda"; islands[1] = "Fiji" islands[2] = "Azores"; islands[3] = "Cozumel"; int ref; while(y < 4){ system.out.println(islands[ref]); index[0] = 1; index[1] = 3; index[2] = 0; index[3] = 2; String[] islands = new String[4]; System.out.print.. 더보기
[Head First Java] Chapter3 연습문제 컴파일러가 되어봅시다. B문제 소스가 컴파일을 할 수 있는지 확인 문제 소스 public class Hobbits { String name; public static void main(String[] args) { Hobbits[] h = new Hobbits[3]; int z = 0; while(z < 4){ z = z + 1; h[z] = new Hobbits(); h[z].name = "bilbo"; if(z == 1){ h[z].name = "frodo"; } if(z == 2){ h[z].name = "sam"; } System.out.print(h[z].name + " is a "); System.out.println("good Hobbit name"); } } } 정답 public class Hobbits { String.. 더보기
[Head First Java] Chapter3 연습문제 컴파일러가 되어봅시다. A문제 소스가 컴파일을 할 수 있는지 확인 문제 소스 class Books { String title; String author; } public class BooksTestDrive { public static void main(String[] args) { Books[] myBooks = new Books[3]; int x = 0; myBooks[0].title = "The Grapes of Java"; myBooks[1].title = "The Java Gatsby"; myBooks[2].title = "The Java Cookbook"; myBooks[0].author = "bob"; myBooks[1].author = "sue"; myBooks[2].author = "ian"; while(x 더보기
[Head First Java] Chapter3 Dog를 제어해봅시다. 배열 변수 사용법을 보여준다. 소스 public class Dog { String name; public static void main(String[] args){ //Dog 객체를 만들고 접근한다. Dog dog1 = new Dog(); dog1.bark(); dog1.name = "Bart"; //Dog 배열을 만든다. Dog[] myDogs = new Dog[3]; myDogs[0] = new Dog(); myDogs[1] = new Dog(); myDogs[2] = dog1; //배열 레퍼런스를 써서 Dog 객체에 접근 myDogs[0].name = "Fred"; myDogs[1].name = "Marge"; System.out.print("마지막 개의 이름: "); System.out.print.. 더보기
[Head First Java] Chapter3 원시 변수 원시 변수 유형 부울과 문자 유형 비트 범위 boolean (JVM에 따라 다름) true 또는 false char 16비트 0~65535 숫자(모두 부호가 있음) 정수 유형 비트 범위 byte 8비트 -128~127 short 16비트 -32768~32767 int 32비트 -2147483648~2147483648 long 64비트 -아주 큰 값~아주 큰 값 부동소수점 소수 유형 비트 범위 float 32비트 바뀔 수 있음 double 64비트 바뀔 수 있음 큰 유형의 변수를 작은 유형의 변수에 대입은 안된다. 키워드와 변수명 - 변수를 만들때는 이름과 유형이 필요하다. - 변수 이름은 예약어를 사용해서는 안된다. 예약어 boolean byte char double float int long short.. 더보기
[Head First Java] Chapter2 연습문제 수영장 퍼즐 코드 조각을 한번만 사용하여 아래와 같은 출력 결과를 얻어야 한다. 출력 결과 helloooo.... helloooo.... helloooo.... helloooo.... 10 코드 조각 e1 = e1 + 1; e1 = count + 1; e1.count = count + 1; e1.count = e1.count + 1; x y e2 count x < 4 x < 5 x > 0 x > 1 Echo Tester echo() count() hello() e2 = e1; Echo e2; Echo e2 = e1; Echo e2 = new Echo(); x == 3 x == 4 문제 public class EchoTestDrive { public static void main(String[] args){ Echo .. 더보기
[Head First Java] Chapter2 연습문제 코드 자석 아래와 같은 출력 결과를 가지는 코드를 만들어야 한다. bang bang ba-bang ding ding da-ding 코드 조각은 아래와 같다. d.playSnare(); DrumKit d = new DrumKit(); void playSnare(){ System.out.println("bang bang ba-bang"); } public static void main(String[] args){ if(d.snare == true){ d.playSnare(); } d.snare = false; class DrumKitTestDrive{ d.playTopHat(); class DrumKit { void playTopHat(){ System.out.println("ding ding da-ding"); } .. 더보기
[Head First Java] Chapter2 연습문제 컴파일러가 되어봅시다. B문제 소스가 컴파일을 할 수 있는지 확인 소스 class DVDPlayer { boolean canRecord = false; void recordDVD(){ System.out.println("DVD recording"); } } class DVDPlayerTestDrive{ public static void main(String[] args){ DVDPlayer d = new DVDPlayer(); d.canRecord = true; d.playDVD(); if(d.canRecord == true){ d.recordDVD(); } } } 수정된 소스 class DVDPlayer { boolean canRecord = false; void recordDVD(){ System.out.println("DVD r.. 더보기
[Head First Java] Chapter2 연습문제 컴파일러가 되어봅시다. A문제 소스가 컴파일을 할 수 있는지 확인 소스 class TapeDeck{ boolean canRecord = false; void playTape(){ System.out.println("tape playing"); } void recordTape(){ System.out.println("tape recording"); } } class TapeDeckTestDrive{ public static void main(String[] args){ t.canRecord = true; t.playTape(); if(t.canRecord == true){ t.recordTape(); } } }수정된 소스 class TapeDeck{ boolean canRecord = false; void playTape(){ Syst.. 더보기
[Head First Java] Chapter2 객체지향적 프로그래밍 핵심 정리 제작과 테스트가 끝난 코드를 건드리지 않고 프로그램을 확장할 수 있다. 모든 자바 코드는 클래스 내에서 정의 된다. 클래스는 해당 클래스 유형의 객체를 만드는 방법을 설명하는 역할을 한다. 객체는 각자 알아서 자기 할 일을 처리할 수 있다. 객체에는 알고 있는것(속성)과 할 수 있는 것(메소드)이 있다. 객체가 자기 자신에 대해 알고 있는 것은 인스턴스 변수이다. 객체가 할 수 있는 것은 메소드라고 부른다. 클래스를 새로 만들 때는 그 클래스 유형의 객체를 만들어서 테스트하는 테스트용 클래스를 따로 만들어 보는 것이 좋다. 클래스에서는 덜 구체적인 상위클래스로부터 인스턴스 변수와 메소드를 상속할 수 있다. 프로그램을 실행시킬 때 보면 자바 프로그램이란 결국 다른 객체와 대화를 하는 객체에 불과하다. 더보기
[Head First Java] Chapter2 숫자 맞추기 게임 숫자 맞추기 게임에서는 객체가 서로 다른 객체의 메소드를 호출하는 방법을 보여주고 있다. GuessGame 클래스 public class GuessGame { //인스턴스 변수 선언 Player p1; Player p2; Player p3; public void startGame(){ //메소드 선언 //Player 객체를 각 인스턴스 변수에 대입 p1 = new Player(); p2 = new Player(); p3 = new Player(); //찍을 숫자 설정 int guessp1 = 0; int guessp2 = 0; int guessp3 = 0; //찍은 숫자가 맞는지 여부를 저장하기위한 변수 선언 boolean p1isRight = false; boolean p2isRight = false;.. 더보기
[Head First Java] Chapter2 Movie 객체를 만들어 테스트해봅시다. 앞에 첫 객체를 만드는 것 이라면 이번에는 응용이었다. Movie 클래스 class Movie { String title; String genre; int rating; void playIt(){ System.out.println("영화를 상영합니다."); } } MovieTestDrive 클래스 public class MovieTestDrive { public static void main(String[] args) { Movie one = new Movie(); one.title = "주식과 함께 사라지다"; one.genre = "비극"; one.rating = -2; Movie two = new Movie(); two.title = "로스트 인 큐비클 스페이스"; two.genre = "코미디";.. 더보기
[Head First Java] Chapter2 첫 번째 객체를 만들어 봅시다. 객체를 만들고 사용려면 어떻게 해야하는지 알려주고 있다. class Dog { int size; String breed; String name; void bark(){ System.out.println("Ruff! Ruff!"); } } class DogTestDrive { public static void main(String[] arg){ Dog d = new Dog(); d.size = 40; d.bark(); } } 출력 결과 Ruff! Ruff! 처음으로 만들어 봤다. Dog 클래스를 만들고 main 메소드에서 Dog 객체를 만들어 메소드 안에서 설정하고 호출을 할 수 잇다는 것을 알게 되었다. 더보기
[Head First Java] Chapter2 의자 전쟁 Chapter2 의자 전쟁 내용에서는 절차적 프로그래밍과 객체지향적 프로그래밍의 비교를 나타내고 있다. 초반에는 절차적 프로그래밍이 빠르게 보이나 나중에 스펙이 바뀌면 그에 대한 유동성이 떨어지고, 그에 따라 새로 테스트하고, 컴파일해야 하는 문제가 발생해 어렵게 된다. 하지만 객체지향적 프로그래밍은 부분마다 클래스를 만들기 때문에 스펙이 변경되더라도 해당 부분만 수정하면 되어 유동성이 좋으며 컴파일 또한 해당 부분만 하면 되기 때문에 새로 테스트하는 부분에 대하여 전체적으로 수정하고 컴파일하는 절차적 프로그래밍보다는 안전성 면에서도 좋다. 그리고 코드의 재사용에도 유리하다. 상속과 오버라이딩에 대한 단어가 나왔는데 이 부분은 나중에 나온다고 한다. 인터넷의로 검색해보니 아래 같은 글이 있었는데 이 글도.. 더보기
[Head First Java] Chapter1 연습문제 수영장 퍼즐 코드 조각을 한번만 사용하여 아래와 같은 출력 결과를 얻어야 한다. 출력 결과 a noise annoys an oyster코드 조각 System.out.print(" "); System.out.print("a"); System.out.print("n"); system.out.print("an"); x > 0 x < 1 x > 1 x > 3 x < 4 더보기
[Head First Java] Chapter1 연습문제 결과를 맞춰봅시다. 후보 코드를 대입하여 결과 값 알아 맞추기 기본 코드 public class Test57 { public static void main(String[] args){ int x = 0; int y = 0; while(x < 5){ //후보 코드 여기에 후보 코드를 대입하기 //후보 코드 끝 System.out.print(x + "" + y + " "); x = x + 1; } } } 1번 코드 y = x - y; 결과 00 11 21 32 42 2번 코드 y = y + x;결과 00 11 23 36 410 3번 코드 y = y + 2; if(y > 4){ y = y - 1; }결과 02 14 25 36 47 4번 코드 x = x + 1; y = y + x;결과 11 34 59 5번 코드 if(y < 5){.. 더보기
[Head First Java] Chapter1 연습문제 컴파일러가 되어봅시다. 3가지의 소스 파일이 컴파일 잘 되는지 생각해보고 답을 맞쳐야 한다. 1번 소스 public class Exercise1b1 { public static void main(String[] args) { int x = 1; while(x < 10){ if(x > 3){ System.out.println("big x"); } } } } While 순환문을 멈추게 할 내용이 없다. 그래서 x = x - 1 를 집어 넣어 순환을 멈출 수 있게 함 컴파일 되게 수정한 소스 public class Exercise1b1 { public static void main(String[] args) { int x = 1; while(x < 10){ x = x + 1; if(x > 3){ System.out.println(".. 더보기
[Head First Java] Chapter1 연습문제 코드 자석 아래와 같은 출력 결과를 가지는 코드를 만들어야 한다. a-b c-d 코드 조각은 아래와 같다. if(x == 1){ System.out.print("d"); x = x - 1; }if(x == 2){ System.out.print("b c"); }public class Shuffle1 { public static void main(String[] args) {if(x > 2){ System.out.print("a"); }x = x - 1;x = x - 1; System.out.print("-");int x = 3;while(x > 0){ 정답은 public class Shuffle1 { public static void main(String[] args) { int x = 3; while(x > 0){.. 더보기
[Head First Java] 자동 구문 생성기 Head First Java 50페이지에 자동 구문 생성기라는 내용의 소스와 설명이 있다. 배열과 난수 생성에 대해 알 수 있었다. 해당 내용 소스 public class PhraseOMatic { public static void main(String[] args) { //세 종류의 단어 목록을 만든다. String[] wordListOne = {"24/7","multi-Tier","30,000 foot","B-to-B","win-win","front-end","web-based","prevasive","smart","six-sigma","critical-path","dynamic"}; String[] wordListTwo = {"empowerd","sticky","valued-added","orien.. 더보기
[Head First Java] "맥주 99병" Head First Java 41페이지 맥주 99병 관련 문제 원본 소스 public class BeerSong { public static void main(String[] args){ int beerNum = 99; String word = "bottles"; while(beerNum > 0){ if(beerNum == 1){ word = "bottle"; } System.out.println(beerNum + " " + word + " of beer on the wall"); System.out.println(beerNum + " " + word + " of beer."); System.out.println("Take one down."); System.out.println("pass it arou.. 더보기
[Head First Java] 연필을 깍으며 "DooBee" 문제 다음과 같이 DooBee라는 클래스를 실행하는 경우를 생각해봅시다. %Java DooBee DooBeeDooBeeDo 위와 같은 결과가 나오려면 아래의 빈 칸에는 어떤 코드가 들어가야 할 가요? public class DooBee { public static void main(String[] args){ int x = 1; while(x < ____){ System.out.____("Doo"); System.out.____("Bee"); x = x + 1; } if(x == ____){ System.out.print("Do"); } } } 위는 Head First Java 47페이지 부분의 문제이다. 정답은 public class DooBee { public static void main(String[].. 더보기