### 주제 + 자바 입문 스터디 ### 목표 + 자바 기초 문법의 이해 + 객체지향 개념 숙달 + 프로그램 설계 및 구현 능력 배양 ### 커리큘럼 + [강의자료](https://goo.gl/Kl5I19) - 자바 프로그래밍 개론 - 자바 기본 문법 - 클래스와 객체 - 상속과 인터페이스 - 머드게임 만들기 ### 대상 + 자바 입문자 + 직접 무언가를 만드는 연습이 필요한 자. ### 시간 및 장소 + 매주 수요일 7시-9시 + 가산 디지털 단지 ### 연락처 + 카톡: chaesam
# 생성자 ## 문제 + 생성자란 무엇이고 어떻게 사용하는지 알려주세요. ## 힌트 + 구글링: 자바 생성자 + 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 기준) ## 출력 예 ![](https://www.dropbox.com/s/ihfvrc7qg0gpai6/0201.png?dl=1)
# 조건문 ## 문제 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 ```
# 격투게임 ## 문제 객체지향 프로그래밍을 적용한 캐릭터격투 게임을 만들어주세요. ![](https://www.dropbox.com/s/4qlbscdst9f6kpw/0501.jpg?dl=1) ## 요구사항 + 캐릭터는 이름과 체력을 갖으며, 모든 캐릭터의 기본 체력은 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
# 자바 FX ## 문제 + 자바 FX란 무엇인지 조사하여 발표해주세요 + 학생성적 기록부 프로그램을 자바FX를 통해 만들어주세요
# 클래스와 객체 ## 문제 클래스와 객체의 개념을 이해하고 이를 정리하여 발표해주세요. ## 레퍼런스 + http://cloudstudying.kr/lectures/80 + http://cloudstudying.kr/lectures/81
# 부트스트랩 사용하기 ## 문제 bootstrap을 사용하여 아래 예제 페이지를 만들어 봅시다. ## 예제 페이지 ![Imgur](http://i.imgur.com/1qjBj0W.png) ## 레퍼런스 + 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
# 로그인 / 로그아웃 ## 문제 아래 그림과 같이 동작하는 로그인 로그아웃 페이지를 작성해주세요. ![Imgur](http://i.imgur.com/a84qUCX.png) ## 레퍼런스 + [request & response 객체](http://cloudstudying.kr/lectures/60) + [form 태그](http://cloudstudying.kr/lectures/72) + [로그인 / 로그아웃](http://cloudstudying.kr/lectures/73)
# 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 야구 사이트 메인 페이지 & 생성 페이지 ![Imgur](http://i.imgur.com/iuUY9qf.png) ## 해결 흐름 1. 원하는 데이터의 테이블을 설계하세요. 2. 설계된 테이블을 통해 데이터를 추가 할 수 있게 구현해주세요. 3. 추가된 데이터를 읽어올 수 있게 해주세요. ## 레퍼런스 + 데이터 등록(http://cloudstudying.kr/lectures/120) + 데이터 읽기(http://cloudstudying.kr/lectures/121)