참고도서 - 헤드퍼스트 자바
www.hanbit.co.kr/store/books/look.php?p_code=B9738765259
Head First Java: 뇌 회로를 자극하는 자바 학습법(개정판)
이 책은 객체지향 프로그래밍과 자바를 완벽하게 배울 수 있는 책입니다. 두뇌 친화적인 학습이론을 바탕으로 만들어진 이 책은 자바의 기초에서부터 시작해서 스레드, 네트워크 소켓, 분산 프
www.hanbit.co.kr
1. Dog 객체 만들기 <2장 p.70>
[Dog.java]
package chap02;
public class Dog {
// 인스턴스 변수
int size;
String bread;
String name;
// 메소드
void bark() {
System.out.println("Ruff! Ruff!");
}
}
[DogTestDrive.java]
package chap02;
public class DogTestDrive {
public static void main(String[] args) {
// Dog 객체 생성
Dog d = new Dog();
// 점 연산자(.)를 써서 Dog의 크기 설정
d.size = 40;
// bark() 메서드 호출
d.bark();
}
}
[실행결과]
2. Movie 객체를 통한 테스트 <2장 p.71>
[Movie.java]
package chap02;
public class Movie {
String title;
String genre;
int rating;
void playIt() {
System.out.println("영화를 상영합니다");
}
}
[MovieTestDrive.java]
package chap02;
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 = "코미디";
two.rating = 5;
two.playIt();
Movie three = new Movie();
three.title = "바이트 클럽";
three.genre = "기분이 좋아지는 비극";
three.rating = 127;
}
}
[실행결과]
3. 숫자 맞추기 게임 <2장 p.72~74>
[GuessGame.java]
package chap02;
public class GuessGame {
// GuessGame에는 Player 객체 세 개를 저장하기 위한 인스턴스 변수 세 개가 있음
Player p1;
Player p2;
Player p3;
public void startGame() {
// Player 객체 세 개를 생성하고 각각을 Player 인스턴스 변수 세 개에 대입
p1 = new Player();
p2 = new Player();
p3 = new Player();
// Player 객체 세 개에서 찍은 숫자를 저장하기 위해 변수 세 개를 선언
int guessp1 = 0;
int guessp2 = 0;
int guessp3 = 0;
// 세 선수가 찍은 숫자가 맞는지 여부를 저장하기 위해 변수 세 개를 선언
boolean p1isRight = false;
boolean p2isRight = false;
boolean p3isRight = false;
// 선수들이 맞출 숫자를 생성
int targetNumber = (int) (Math.random() * 10);
System.out.println("0 이상 9 이하의 숫자를 맞춰보세요.");
while (true) {
System.out.println("맞춰야 할 숫자는 " + targetNumber + "입니다.");
// 각 선수별로 guess() 메소드를 호출
p1.guess();
p2.guess();
p3.guess();
// 각 객체의 인스턴스 변수를 접근하여 각 선수가 찍은 숫자(guess() 메소드를 실행시킨 결과)를 알아냄
guessp1 = p1.number;
System.out.println("Player one guessed " + guessp1);
guessp2 = p2.number;
System.out.println("Player two guessed " + guessp2);
guessp3 = p3.number;
System.out.println("Player three guessed " + guessp3);
// 각 선수가 찍은 숫자 중에서 맞춘 숫자가 있는지를 확인
// 맞춘 선수가 있으면 그 선수에 해당하는 변수를 참(true)으로 설정 (기본값은 거짓(false))
if (guessp1 == targetNumber) {
p1isRight = true;
}
if (guessp2 == targetNumber) {
p2isRight = true;
}
if (guessp3 == targetNumber) {
p3isRight = true;
}
// 1번 선수 또는 2번 선수 또는 3번 선수가 맞았으면... (||연산자는 또는(OR)을 의미)
if (p1isRight || p2isRight || p3isRight) {
System.out.println("맞춘 선수가 있습니다!");
System.out.println();
System.out.println("1번 선수: " + p1isRight);
System.out.println("2번 선수: " + p2isRight);
System.out.println("3번 선수: " + p3isRight);
System.out.println("게임 끝.");
System.out.println();
break; // 게임이 끝났으므로 break문으로 순환문을 빠져나옴
} else {
// 아직 아무도 못 맞췄기 때문에 순환문을 계속 돌리며 숫자를 다시 찍게 함
System.out.println("다시 시도해야 합니다.");
System.out.println();
} // if-else 부분 끝
} // 순환문 끝
} // 메소드 끝
} // 클래스 끝
[Player.java]
package chap02;
public class Player {
int number = 0; // 찍은 숫자를 저장할 변수
public void guess() {
number = (int) (Math.random() * 10);
System.out.println("찍은 숫자: " + number);
}
}
[GameLauncher.java]
package chap02;
public class GameLauncher {
public static void main (String[] args) {
GuessGame game = new GuessGame();
game.startGame();
}
}
[실행결과]
4. Dog 배열 <3장 p.96>
[Dog.java] : 1번의 Dog와 다른 패키지에 두었기 때문에 같은 이름의 클래스 생성 가능
package chap03;
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];
// Dog 몇 마리 넣기
myDogs[0] = new Dog();
myDogs[1] = new Dog();
myDogs[2] = dog1;
// 배열 레퍼런스를 사용하여 Dog 객체에 접근
myDogs[0].name = "Fred";
myDogs[1].name = "Marge";
// myDogs[2]의 이름이 뭐였지?
System.out.print("마지막 개의 이름: ");
System.out.println(myDogs[2].name);
// 순환문을 써서 배열에 있는 모든 개가 짖도록 함
// 배열에는 'length'라는 변수가 있어서 그 변수를 통해 배열에 있는 원소의 개수를 알아낼 수 있음
int x = 0;
while (x < myDogs.length) {
myDogs[x].bark();
x = x+1;
}
}
public void bark() {
System.out.println(name + "이(가) 왈!하고 짖습니다.");
}
}
[실행결과]
5. 매개변수와 리턴 유형 활용 방법 - 일렉트릭 기타 예제 (변형) <4장 p.113>
[ElectricGuitar.java]
package chap04;
public class ElectricGuitar {
private String brand = "삼익악기";
private int numOfPickups = 7;
private boolean rockStarUsesIt = true;
public String getBrand() {
return brand;
}
public void setBrand(String aBrand) {
this.brand = aBrand;
}
public int getNumOfPickups() {
return numOfPickups;
}
public void setNumOfPickups(int numOfPickups) {
this.numOfPickups = numOfPickups;
}
public boolean getRockStarUsesIt() {
return rockStarUsesIt;
}
public void setRockStarUsesIt(boolean yesOrNo) {
this.rockStarUsesIt = yesOrNo;
}
// 인스턴스 변수와 메소드명은 붙이는 것이 좋음 (이러한 명명 규칙을 사용하면 중요한 Java 표준을 준수하게 됨)
// ※ getter-setter 자동생성: 마우스 우클릭 - Source - Generate Getters and Setters
}
[ElectricGuitarMain.java]
package chap04;
public class ElectricGuitarMain {
public static void main(String[] args) {
ElectricGuitar g = new ElectricGuitar();
String brand = g.getBrand();
System.out.println(brand);
int number = g.getNumOfPickups();
System.out.println(number);
boolean UsesIt = g.getRockStarUsesIt();
System.out.println(UsesIt);
}
}
[실행결과]
6. GoodDog 클래스 캡슐화 (변형) <4장 p.116>
[GoodDogTestDrive.java]
package chap04;
public class GoodDogTestDrive {
public static void main(String[] args) {
GoodDog one = new GoodDog();
one.setSize(70);
GoodDog two = new GoodDog();
two.setSize(8);
System.out.println("Dog one: " + one.getSize());
System.out.println("Dog two: " + two.getSize());
one.bark();
two.bark();
}
}
class GoodDog {
// 인스턴스 변수를 private으로 만듬
private int size;
public int getSize() {
// 게터와 세터 메소드는 public으로 만듬
return size;
}
public void setSize(int s) {
size = s;
}
// 메소드의 새로운 기능이 추가된 것은 아니지만 나중에 마음을 바꿀수도 있다는 장점 존재
// 나중에 메소드를 더 안전하고 빠르게, 그리고 더 좋게 고칠 수 있음
void bark() {
if (size > 60) {
System.out.println("Wooof! Wooof!");
} else if (size > 60) {
System.out.println("Ruff! Ruff!");
} else {
System.out.println("Yip! Yip!");
}
}
}
[실행결과]
7. 인스턴스 변수 선언과 초기화 (변형) <4장 p.118>
[PoorDogTestDrive.java]
package chap04;
class PoorDog {
// 인스턴스 변수 두 개를 선언하지만, 값을 대입하지는 않음
private int size;
private String name;
// 이 메소드에서는 무엇을 리턴하는가?
public int getSize() {
return size;
}
public String getName() {
return name;
}
}
public class PoorDogTestDrive {
public static void main(String[] args) {
PoorDog one = new PoorDog();
// 과연 컴파일이 될까?
System.out.println("Dog size is " + one.getSize());
System.out.println("Dog name is " + one.getName());
}
}
// 인스턴스 변수는 항상 기본값을 가지므로 초기화하지 않아도 됨.
// 숫자 원시 변수(Number primitives, char 포함)는 0을 얻고, 부울형(boolean)은 거짓(false)을 얻으며,
// 객체 레퍼런스는 null이라는 기본 초기값이 있음.
[실행결과]
'데이터 [Data] > Java & JSP' 카테고리의 다른 글
Java 미니 프로젝트 계획서.txt: 히어로 야구 시뮬레이터 (0) | 2021.05.07 |
---|---|
전략 패턴(Strategy Pattern) 예제 만들기: 2021 KBO 구단 (0) | 2021.05.05 |
[이것이 자바다] '4장. 조건문과 반복문' 확인문제 (0) | 2021.04.29 |
상속 (0) | 2021.04.29 |
Scanner, Switch문을 활용한 사칙연산 계산기 (0) | 2021.04.29 |
댓글