이것이 자바다!
4주
구로
입문
x 1
### 주제
+ 자바 입문 스터디
### 목표
+ 자바 기초 문법의 이해
+ 객체지향 개념 숙달
+ 프로그램 설계 및 구현 능력 배양
### 커리큘럼
+ [강의자료](https://goo.gl/Kl5I19)
- 자바 프로그래밍 개론
- 자바 기본 문법
- 클래스와 객체
- 상속과 인터페이스
- 머드게임 만들기
### 대상
+ 자바 입문자
+ 직접 무언가를 만드는 연습이 필요한 자.
### 시간 및 장소
+ 매주 수요일 7시-9시
+ 가산 디지털 단지
### 연락처
+ 카톡: chaesam
# 객체지향 프로그래밍
## 문제
객체지향 프로그래밍이 무엇인지 조사해주세요.
## 힌트
+ 구글링: OOP, 객체지향 프로그래밍
# 컴파일링
## 문제
컴파일링이란 무엇인지 설명해주세요.
## 힌트
+ 구글링: 컴파일링
# 클래스와 객체
## 문제
+ 클래스와 객체의 연관 관계를 설명해주세요.
## 힌트
+ 구글링: 클래스와 객체
# 클래스의 구조
## 문제
+ 클래스의 구조에 대해 조사해주세요
## 힌트
+ 구글링: 클래스의 구조
+ 변수와 함수
+ 상태와 동작
# 생성자
## 문제
+ 생성자란 무엇이고 어떻게 사용하는지 알려주세요.
## 힌트
+ 구글링: 자바 생성자
+ https://wikidocs.net/281
# 자바 패키지와 API
## 문제
1. 자바 패키지란 무엇인지 알려주세요.
2. 자바 API란 무엇인지 조사해주세요.
3. 자바 API 문서 보는법을 알려주세요.
## 힌트
+ 구글링: 자바 패키지, 자바 API
+ https://wikidocs.net/231
+ https://docs.oracle.com/javase/8/docs/api/
# 스캐너(Scanner) 클래스
## 문제
1. 스캐너(Scanner) 클래스에 대해 조사해주세요.
2. 스캐너 클래스의 메소드인 next()와 nextInt()의 차이를 설명해주세요.
## 힌트
+ 구글링: 자바 스캐너
+ https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html
# 머드게임 만들기
## 문제
1. 아래 소스코드를 복사 붙여넣기 하여 프로그램을 실행해주세요.
2. 몬스터를 잡아 골드를 획득하도록 하려면 어떻해야 할까요?
## 코드
**PlayStation.java**
```java
import java.util.Scanner;
public class PlayStation {
Character hero;
int menuNum = 0;
Scanner input = new Scanner(System.in);
public static void main(String[] args) {
PlayStation ps = new PlayStation();
ps.play();
}
private void play() {
while (true) {
switch (menuNum) {
case 0:
greetingMenu();
break;
case 10:
creationMenu();
break;
case 20:
choiceMenu();
break;
case 1:
hunting();
break;
case 2:
rest();
break;
case 3:
hero.status();
menuNum = 20;
break;
default:
break;
}
System.out.println();
}
}
private void rest() {
System.out.println("체력을 회복합니다!!");
hero.heal();
menuNum = 20;
}
private void hunting() {
Character monster = new Character("오크", 1, 30, 30);
monster.status();
System.out.println("[1]: 전투");
System.out.println("[2]: 도망");
System.out.print("> ");
int choice = input.nextInt();
switch (choice) {
case 1:
hero.hunt(monster);
break;
case 2:
System.out.println("도망칩니다..");
break;
default:
break;
}
menuNum = 20;
}
private void choiceMenu() {
System.out.println("[1]: 사냥");
System.out.println("[2]: 휴식");
System.out.println("[3]: 상태");
System.out.println("[4]: 종료");
System.out.print("> ");
int choice = input.nextInt();
menuNum = choice;
}
private void creationMenu() {
System.out.print("캐릭터 이름을 정해주세요: ");
String name = input.next();
System.out.printf("[%s] 캐릭터가 생성되었습니다!!\n", name);
hero = new Character(name, 1, 50, 50);
hero.status();
menuNum = 20;
}
private void greetingMenu() {
System.out.println("============================");
System.out.println("판타지 게임에 오신 것을 환영합니다..");
System.out.println("============================");
menuNum = 10;
}
}
```
**Character.java**
```java
public class Character {
String name;
int level;
int hp;
int maxHp;
public Character(String name, int level, int hp, int maxHp) {
this.name = name;
this.level = level;
this.hp = hp;
this.maxHp = maxHp;
}
public void attack(Character target) {
target.hp -= 10;
System.out.printf("[%s]의 공격!!\n", this.name);
System.out.printf("\t%s: %d/%d\n", target.name, target.hp, target.maxHp);
}
public void status() {
System.out.printf("[%s] Lv: %d HP: %d/%d\n", name, level, hp, maxHp);
}
public void hunt(Character monster) {
// 둘다 살아있으면 계쏙 싸움!!
while (this.hp > 0 && monster.hp > 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (Math.random() > 0.5)
this.attack(monster);
else
monster.attack(this);
}
if (this.hp > 0)
System.out.println("승리하였습니다!!");
else
System.out.println("패배하였습니다..");
}
public void heal() {
hp = maxHp;
}
}
```
# 온도 변환
관상어 키우기에 입문한 김구피 학생은 요즘 구피를 키우고 있습니다. 구피는 물의 온도가 화씨 77°F 일때, 성장 및 번식에 가장 좋다고 합니다. 이를 알게된 김구피 학생은 최적의 물온도를 맞추려 하지 만.. 현재 가지고 있는 온도계가 섭씨(°C)온도만을 표기하는군요...
## 문제
화씨(°F)온도를 섭씨(°C)온도로 변환하는 프로그램을 작성해 주세요. 변환 공식은 아래와 같습니다.
+ °C = (°F - 32) ÷ 1.8
# 주사위 게임
## 개요
우연찮게 도박 사이트에 접속하게 된 박컴돌(21) 학생. 주사위 도박 게임에 빠지고 마는데..
## 게임 룰
주사위를 던져 큰 수가 나온 사람이 달러를 획득한다.
획득 달러량은 주사위의 수와 같다.
## 요구사항
+ Math.random() 메소드를 사용하여 주사위 값을 반환하는 dice() 메소드를 구현할 것.
+ 달러를 원화가치로 환전하는 exchange() 메소드를 구현할 것.
+ 환율은 1달러당 1116.07143원으로 한다.(2016.10.10 기준)
## 출력 예

# 조건문
## 문제 01
조건문에 대해 조사해주세요.
## 문제 02
아래 코드의 결과를 예상해주세요.
```java
public class Metro {
public static void printRole(int age) {
if (age > 18) {
System.out.println("성인 입니다.");
} else if ((18 >= age) && (age >= 13)) {
System.out.println("청소년 입니다.");
} else if ((13 > age) && (age >= 6)) {
System.out.println("어린이 입니다.");
} else {
System.out.println("유아 입니다.");
}
}
public static void main(String[] args) {
printRole(20);
printRole(15);
printRole(10);
printRole(5);
}
}
```
## 레퍼런스
+ http://cloudstudying.kr/lectures/52
+ https://wikidocs.net/211
# 반복문
## 문제
반복문이 무엇인 조사하고, while 문과 for 문의 차이점을 설명해주세요.
## 힌트
+ 구글링: 반복문 while for 차이
## 레퍼런스
+ http://cloudstudying.kr/lectures/70
# 배열
## 문제
배열은 무엇이고 어떻게 사용하는지 조사해주세요.
## 힌트
+ 구글링: java 배열 사용법
## 레퍼런스
+ http://cloudstudying.kr/lectures/74
# 정수의 합
## 문제
1부터 100사이의 모든 정수의 합을 구해주세요.
```
1 + 2 + 3 + ... + 99 + 100 =?
```
## 힌트
+ 반복문을 사용하여 더함.
# 고득점자 찾기
가장 높은 성적을 받은 학생의 이름과 점수를 찾아주세요.
## 성적표
```
Elena(65), Suzie(74), John(23), Emily(75), Neda(68),
Kate(96), Alex(88), Daniel(98), Hamilton(54)
```
## 출력 예
```
1등: Daniel(98)
```
## 스켈레톤 코드
```java
public class TopScoreStudent {
public static int topIndex(int[] scores) {
/* 가장 높은 성적의 인덱스를 반환하는 함수를 구현하세요. */
return 0;
}
public static void main(String[] args) {
String[] names = {/* 1. 이름을 배열로 만드세요. */};
int[] scores = {/* 2. 점수를 배열로 만드세요. */};
int i = topIndex(scores);
System.out.printf("1등: %s(%d)\n", names[i], scores[i]);
}
}
```
## 레퍼런스
```
http://cloudstudying.kr/lectures/103
```
# 격투게임
## 문제
객체지향 프로그래밍을 적용한 캐릭터격투 게임을 만들어주세요.

## 요구사항
+ 캐릭터는 이름과 체력을 갖으며, 모든 캐릭터의 기본 체력은 100이다.
+ 캐릭터는 펀치를 통해 상대 캐릭터의 체력을 감소시킬 수 있다.
+ 격투는 두 캐릭터 중 하나의 체력이 모두 소진될 까지 진행된다.
## 실행 예
<div class="embed-responsive embed-responsive-4by3">
<iframe class="embed-responsive-item" src="https://www.youtube.com/embed/Ojq_T378_mE"></iframe>
</div>
## 레퍼런스
+ http://cloudstudying.kr/lectures/104
# 코드 컴뱃
## 문제
코드 컴뱃(codecombat.com) 사이트에 가입 후, **KITHGAUD DUNGEON**을 모두 클리어 해주세요
## 레퍼런스
+ https://codecombat.com
# 자바가 보이는 그림 책
## 문제
해당 도서를 구입하여여 4장까지 학습 후 질문 거리를 준비해주세요.
## 레퍼런스
+ http://www.yes24.com/24/goods/11468497?scode=032&OzSrank=1
# 자바 FX
## 문제
+ 자바 FX란 무엇인지 조사하여 발표해주세요
+ 학생성적 기록부 프로그램을 자바FX를 통해 만들어주세요
# 클래스와 객체
## 문제
클래스와 객체의 개념을 이해하고 이를 정리하여 발표해주세요.
## 레퍼런스
+ http://cloudstudying.kr/lectures/80
+ http://cloudstudying.kr/lectures/81
# 웹 프로그래밍이란?
## 문제
웹 프로그래밍에 대해 조사하고 이를 발표해봅시다.
## 레퍼런스
+ http://cloudstudying.kr/lectures/163
# 부트스트랩 사용하기
## 문제
bootstrap을 사용하여 아래 예제 페이지를 만들어 봅시다.
## 예제 페이지

## 레퍼런스
+ http://getbootstrap.com/components/#jumbotron
+ http://getbootstrap.com/components/#page-header
+ http://getbootstrap.com/css/#buttons
+ http://getbootstrap.com/css/#tables
+ http://getbootstrap.com/components/#navbar
# 로그인 / 로그아웃
## 문제
아래 그림과 같이 동작하는 로그인 로그아웃 페이지를 작성해주세요.

## 레퍼런스
+ [request & response 객체](http://cloudstudying.kr/lectures/60)
+ [form 태그](http://cloudstudying.kr/lectures/72)
+ [로그인 / 로그아웃](http://cloudstudying.kr/lectures/73)
# 데이터베이스 맛보기
## 문제
레퍼런스 사이트를 통해 SQL을 학습해봅시다.
## 레퍼런스
+ https://www.codecademy.com/learn/learn-sql
# Spring 개발환경 만들기
## 문제
레퍼런스를 참고하여 Spring 개발환경을 만들어 주세요.
## 요약
1. IDE 설치 - STS(https://spring.io/tools)
2. DB 설치 - PostgreSQL 9.4(https://www.postgresql.org/download/)
3. 서버 설치 - Tomcat 7.0 이상(http://tomcat.apache.org/download-70.cgi)
4. 프로젝트 생성 및 실행
5. DB 연동
+ pom.xml 설정
+ root-context.xml 설정
6. 부트스트랩 연동
+ 부트스트랩 다운로드 및 복사
+ sevlet-context.xml 설정
## 레퍼런스
+ 개발환경 만들기(http://cloudstudying.kr/lectures/111)
+ 기본 프로젝트 구조(http://cloudstudying.kr/lectures/116)
+ DB 연동(http://cloudstudying.kr/lectures/117)
+ Bootstrap 연동(http://cloudstudying.kr/lectures/119)
# 데이터 생성 및 읽어오기
## 문제
레퍼런스 페이지를 학습하여 자신만의 사이트를 다시 만들어 주세요!
## 예제: KBO 야구 사이트
메인 페이지 & 생성 페이지

## 해결 흐름
1. 원하는 데이터의 테이블을 설계하세요.
2. 설계된 테이블을 통해 데이터를 추가 할 수 있게 구현해주세요.
3. 추가된 데이터를 읽어올 수 있게 해주세요.
## 레퍼런스
+ 데이터 등록(http://cloudstudying.kr/lectures/120)
+ 데이터 읽기(http://cloudstudying.kr/lectures/121)