본문 바로가기
데이터 [Data]/Java & JSP

스토리 기반 Java 예제: 객체지향 프로그래밍, 배열, get-set 메소드

by 냉철하마 2021. 4. 30.

참고도서 - 헤드퍼스트 자바 

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;

              

       }

}

 

[실행결과]

playIt()만 출력하기 때문에 title, genre, rating은 모두 출력되지 않음

 

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이라는 기본 초기값이 있음.

      

[실행결과]

 

 

 

 

 

 

댓글