1. 실습프로젝트 준비하기
# 01. 자바 프로젝트 준비하기
## 학습목표
- Gradle 빌드 도구를 사용하여 자바 프로젝트 폴더를 구성할 수 있다.
- Gradle 빌드 스크립트 파일에서 실행할 클래스를 설정할 수 있다.
- Gradle 빌드 도구를 사용하여 애플리케이션을 실행할 수 있다.
- 콘솔로 값을 출력할 수 있다.
- IntelliJ IDE에서 Gradle 프로젝트를 실행할 수 있다.
## 요구사항
- myapp 폴더를 만들고 자바 프로젝트 폴더로 구성
- IntelliJ IDE로 프로젝트 가져온 후 실행
## 실행 결과
```
[팀 프로젝트 관리 시스템]
```
1.1 Java 프로젝트 생성
- 프로젝트 폴더 만들기
터미널에
- $mkdir myapp2
- $gradle init
파일 설정
- InteliJ에서 프로젝트 열기
InteliJ에서 프로젝트 열기
- myappp2 에서 settings.gradle 선택 후 프로젝트로 열기
- myapp2/app/main/java/ bitcamp.myapp2 패키지 생성
※ 실행이 안된다 ?
- gradle.build 에서 application의 mainClass가 'org.example.App'으로 되어있다.
- gradle build 시에 gradle 제대로된 mainClass를 참조하지 못한다.
-> mainClass의 이름을 'bitcmap.myapp2.App'로 바꿔준다.
2. 리터럴과 변수를 사용해서 문자열 출력하기
2.1 초기화면 작성하기
# 02. 리터럴과 변수를 사용해서 문자열 출력하기
## 학습목표
- 문자열 및 숫자 등을 리터럴로 표현할 수 있다.
- 변수를 사용하여 값을 다룰 수 있다.
- 출력문을 사용하여 값을 콘솔로 출력할 수 있다.
## 요구사항
- 애플리케이션의 제목과 기본 메뉴 출력
## 실행 결과
```
----------------------------------------------
[팀 프로젝트 관리 시스템]
1. 회원
2. 팀
3. 프로젝트
4. 게시판
5. 도움말
6. 종료
----------------------------------------------
```
- 리터럴 변수 선언 및 초기화
package bitcamp.myapp;
public class App {
public static void main(String[] args) {
String appTitle = "[팀 프로젝트 관리 시스템]";
String line = "---------------------------";
String menu1 = "1. 회원";
String menu2 = "2. 팀";
String menu3 = "3. 프로젝트";
String menu4 = "4. 게시판";
String menu5 = "5. 도움말";
String menu6 = "6. 종료";
System.out.println(line);
System.out.println(appTitle);
System.out.println(menu1);
System.out.println(menu2);
System.out.println(menu3);
System.out.println(menu4);
System.out.println(menu5);
System.out.println(menu6);
System.out.println(line);
}
}
- 결과
3. ANSI 이스케이프 코드를 사용하여 문자열 꾸미기
# 03. ANSI 이스케이프 코드를 사용하여 출력 문자열 꾸미기
## 학습목표
- ANSI 이스케이프 문자를 다룰 수 있다.
- Gradle 빌드 도구의 옵션을 이용하여 콘솔 출력을 제어할 수 있다.
- 코드 정리 기법 중 '설명하는 변수'를 활용할 수 있다.
## 요구사항
- 애플리케이션 제목을 볼드체로 출력
- 위, 아래 구분선을 볼드체로 출력
- '6. 종료' 메뉴를 빨강색 + 볼드체로 출력
- Gradle 디버깅 출력은 제거
## 실행 결과
```
---------------------------------------------- <== 볼드체
[팀 프로젝트 관리 시스템] <== 볼드체
1. 회원
2. 팀
3. 프로젝트
4. 게시판
5. 도움말
6. 종료 <== 빨강색 + 볼드체
---------------------------------------------- <== 볼드체
```
3.1 ANI 이스케이프 코드
- ANSI 이스케이프 코드는 텍스트 형식을 제어하기 위해 터미널과 콘솔에서 사용한다.
- 이 코드를 통해 텍스트의 색상, 스타일, 배경색 등을 변경할 수 있으며, ANSI 이스케이프 코드는 다음과 같은 형식이다.
- \033[<코드>m
※ 여러개의 코드를 사용할 경우 ;으로 구분한다.
- \033[<코드><코드>m
※ 사용이 끝나면 마지막에 반드시 초기화를 해주어야한다.
- 초기화를 안하면 이스케이프코드 이후로 끝날때 까지 적용된다.
- ANSI 이스케이프 코드 (색깔)
색상 | 텍스트 | 배경 |
검정 | 30 | 40 |
빨강 | 31 | 41 |
초록 | 32 | 42 |
노랑 | 33 | 43 |
파랑 | 34 | 44 |
자주 | 35 | 45 |
청록 | 36 | 46 |
흰색 | 37 | 47 |
- ANSI 이스케이프 코드 (텍스트 스타일)
스타일 | 코드 |
리셋 | 0 |
굵게 | 1 |
흐리게 | 2 |
기울기 | 3 |
밑줄 | 4 |
반전(배경/전경) | 7 |
숨기기 | 8 |
취소선 | 9 |
3.2 ANI 이스케이프 코드로 문자열 꾸미기
- 빨강색 : \033[33m, 볼드체 : \033[1m, 초기화 : \033[0m
/*
* This source file was generated by the Gradle 'init' task
*/
package bitcamp.myapp;
public class App {
public static void main(String[] args) {
String redAnsi = "\033[31m";
String boldAnsi = "\033[1m";
String resetAnsi = "\033[0m";
//중략//
System.out.println(boldAnsi + line + resetAnsi);
System.out.println(boldAnsi + appTitle + resetAnsi);
System.out.println(menu1);
System.out.println(menu2);
System.out.println(menu3);
System.out.println(menu4);
System.out.println(menu5);
System.out.println(boldAnsi + redAnsi + menu6 + resetAnsi);
System.out.println(boldAnsi + line + resetAnsi);
}
}
- 결과
4. 키보드 입력다루기
# 04. 키보드 입력 다루기
## 학습목표
- 키보드 입력을 다룰 수 있다.
- 조건문을 사용하여 실행을 분기할 수 있다.
- 반복문을 사용하여 특정 명령문을 반복해서 실행할 수 있다.
- Gradle로 run 태스크를 실행할 때 키보드를 표준 입력으로 사용할 수 있게 설정할 수 있다.
## 요구사항
- 사용자로부터 메뉴 번호를 입력 받기
- 메뉴 번호에 해당하는 메뉴 이름을 출력
- 종료 메뉴 번호를 입력하면 실행을 종료
## 실행 결과
```
----------------------------------------------
[팀 프로젝트 관리 시스템]
1. 회원
2. 팀
3. 프로젝트
4. 게시판
5. 도움말
6. 종료
----------------------------------------------
> 1
회원
> 3
프로젝트
> 9
메뉴 번호가 옳지 않습니다.
> 6
종료합니다.
```
4.1 표준입력 메서드
- java.io.InputStream
- java.io.InputStream 은 자바에서 바이트단위로 데이터를 읽어오는 추상클래스이다.
- 바이트 기반 입력 스트림을 나타낸다.
- java.io.InputStream keyboard = System.in;
- java.io.InputStream keyboard = System.in;
- System.in은 자바프로그램에서 사용자로 부터 입력을 받는 표준 입력 스트림이다.
- 위 코드는 System.in을 사용하여 키보드 입력을 받기 위해 InputStream객체를 생성한 다음 이를 변수 keyboard에 할당한다.
- java.util.Scanner
- 자바에서 표준입력,파일, 문자열 등 다양한 소스에서 데이터를 읽는 클래스이다.
- java.util.Scanner scanner = new java.util.Scanner(keyboard);
- java.util.Scanner scanner은 Scanner 클래스형식으로 scanner 객체를 인스턴스 한다.
- new Scanner(keyboard)는 keyboard(System.in)을 받아 Scanner형식으로 메모리를 할당한다.
- 사용자로부터 keyboard값을 받아 Scanner클래스 만큼의 크기로 메모리를 할당하여 인스턴스된 객체 scanner에 대입한다.
- int menuNo = scanner.nextInt();
- 숫자 값을 받기위해 생성된 인스턴스의 nextInt()의 메서드롤 호출한다.
-keyboard.close();
- 할당된 메모리를 관리하기 위해 해제를 한다.
4.2 do~while문
- 루프문의 하나로 do를 실행하고 while의 조건을 판단하여 do를 실행할지 루프문을 종료할지 결정한다.
do{
//루프에서 실행할 코드
//첫번째는 무조건 실행
//이후 while문의 참/거짓에 따라 실행
}while(조건식);
4.3 Switch문
- 조건문의 하나로 case에 해당하면 해당case를 수행하고 else이면 default를 수행한다.
switch (식 또는 변수){ //조건식을 사용할 변수
case 값1:
// 변수가 값1에 해당하면 실행 할 코드
break;
case 값2:
// 변수가 값2에 해당하면 실행 할 코드
case 값3:
// 변수가 값3에 해당하면 실행 할 코드
// case2에 break문이 없어서 case2에 해당하는 값도 실행된다.
break;
default:
// 어느것도 해당안되는 실행되는 코드
}
4.4 코드완성하기
- 코드 작성
/*
* This source file was generated by the Gradle 'init' task
*/
package bitcamp.myapp;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
//중략//
java.io.InputStream keyboard = System.in;
java.util.Scanner scanner = new java.util.Scanner(keyboard);
int menuNo;
do {
System.out.print("> ");
menuNo = scanner.nextInt();
switch (menuNo) {
case 1:
System.out.println("회원");
break;
case 2:
System.out.println("팀");
break;
case 3:
System.out.println("프로젝트");
break;
case 4:
System.out.println("게시판");
break;
case 5:
System.out.println("도움말");
break;
case 6:
System.out.println("종료합니다.");
scanner.close();
break;
default:
System.out.println("메뉴 번호가 옳지 않습니다.");
}
} while (menuNo != 6);
}
}
- 결과(에러)
- 에러원인
- 초기 gradle설정 시 plugin에 run에서 standardInput에 대한 설정이 없기 때문에 gradle.build에 설정을 해준다.
run{
standardInput = System.in
}
- 결과
5. 전체 코드
/*
* This source file was generated by the Gradle 'init' task
*/
package bitcamp.myapp;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
String redAnsi = "\033[31m";
String boldAnsi = "\033[1m";
String resetAnsi = "\033[0m";
String appTitle = "[팀 프로젝트 관리 시스템]";
String line = "---------------------------";
String menu1 = "1. 회원";
String menu2 = "2. 팀";
String menu3 = "3. 프로젝트";
String menu4 = "4. 게시판";
String menu5 = "5. 도움말";
String menu6 = "6. 종료";
System.out.println(boldAnsi + line + resetAnsi);
System.out.println(boldAnsi + appTitle + resetAnsi);
System.out.println(menu1);
System.out.println(menu2);
System.out.println(menu3);
System.out.println(menu4);
System.out.println(menu5);
System.out.println(boldAnsi + redAnsi + menu6 + resetAnsi);
System.out.println(boldAnsi + line + resetAnsi);
java.io.InputStream keyboard = System.in;
java.util.Scanner scanner = new java.util.Scanner(keyboard);
int menuNo;
do {
System.out.print("> ");
menuNo = scanner.nextInt();
switch (menuNo) {
case 1:
System.out.println("회원");
break;
case 2:
System.out.println("팀");
break;
case 3:
System.out.println("프로젝트");
break;
case 4:
System.out.println("게시판");
break;
case 5:
System.out.println("도움말");
break;
case 6:
System.out.println("종료합니다.");
scanner.close();
break;
default:
System.out.println("메뉴 번호가 옳지 않습니다.");
}
} while (menuNo != 6);
}
}
'개발자 꿈나무의 하루 > 01_Boot Camp' 카테고리의 다른 글
(네이버클라우드 부트캠프) 11일차 - Java프로그래밍 기초(조건문,반복문,배열), 실습프로젝트 (0) | 2024.06.11 |
---|---|
(네이버클라우드 부트캠프) 10일차 - Java프로그래밍 기초(연산자) (0) | 2024.06.07 |
(네이버클라우드 부트캠프) 8일차 - Eclipse IDE설정 및 Java프로그래밍 기초(변수) (0) | 2024.06.04 |
(네이버클라우드 부트캠프) 7일차 - Java프로그래밍 기초(문자집합 & 수) (0) | 2024.06.03 |
(네이버클라우드 부트캠프) 6일차 - Java프로그래밍 기초(패키지, 자료형) (0) | 2024.05.31 |