STS 환경설정
1. 상단 메뉴 - [ window ] -> [ preferences ] -> encoding 검색
2. Workspace → Text file encoding ) other : UTF-8로 설정
3. Content Types → Text → Java Source File ) Default encoding : UTF-8로 설정
STS에서 프로젝트 생성에서 실행까지
[ 프로젝트 생성 ]
1. 상단메뉴 [ File ] → [ new ] → [ other ] → select a wizard → java 검색 : 자바와 관련 내용 나옴
2. project name 입력 / JRE ( JavaSE-17버전 확인) / Module 체크 해제
※ Module은 대규모 프로젝트할 때만 체크하기
3. package explorer에 'HelloJava' 이름의 project 생성됨
[ 소스 파일 생성 ]
1. package 선택 후, 마우스 오른쪽 클릭 → [ New ] → [ Class ] : 클래스명 입력 후, Finish
※ main() 메소드가 익숙해지면, 하단의 public static void main( String [] args ) 체크하기
2. package 내에 소스 파일 생성되고, 동시에 편집 뷰가 자동으로 열림
3. 코드 작성을 완료한 후, 소스 파일을 저장하면 자동으로 컴파일됨
[ 바이트 코드 실행]
4. 반드시 프로그램 실행 진입점인 main() 메소드를 만들어야 실행됨
즉, main() 메소드를 만들지 않은 경우 아래 사진과 같이 실행시킬 파일이 없음
4. 실행 결과는 하단에 console뷰에 출력됨
<terminated> : 실행이 완료되었음을 의미
오늘 작업한 src파일 → Mac으로 불러오기
① c:/ app/ java/ HelloJava/ src에 자바소스파일(.java)를 Mac으로 전송
② Mac ) STS 실행 후, 같은 이름의 새로운 프로젝트 생성
③ 'HelloJava' 내의 src폴더로 붙여넣기
④ STS package explorer 내의 src 폴더 - 마우스 오른쪽 클릭 - Refresh 클릭
※ src ( source code ) : 앞으로 내가 작업한 소스파일이 저장되어 있는 폴더
유니코드
세계 각국의 문자를 2byte로 표현할 수 있는 숫자로 매핑한 국제 표준 규약
Console화면에 글자 출력
1. 'HelloJava' 이름의 class 생성
2. 코드 입력
public class HelloJava {
public static void main( String[] args ) {
System.out.print("환영합니다. 자바세상으로 오신것을 (●'◡'●)");
}
}
- System : 컴퓨터 자체를 의미
- out : 출력 ( 출력할 그룹 앞에 소문자로 표기)
- print() : 출력함수
→ 시스템이 가지고 있는 괄호 안의 내용을 출력
cf) 출력함수
① System.out.print(); - 출력 후 커서가 맨 뒤에 위치
② System.out.println(); - 출력 후 커서가 다음 줄 첫 칸에 위
sysout 입력 후, ctrl + space바 → 자동입력 완성
※ Java ) 실행문 끝에 반드시 세미콜론(;) 붙이기
→ 세미콜론 입력하지 않은 경우, Error : Syntax error, insert ";" to complete BlockStatements
※ Error - 빨간줄로 표시됨
: 마우스 대서 Error 내용 확인 후, 실행문 앞 뒤로 Error 확인해서 스스로 해결하려고 노력하기
- 이모티콘 : window키 + .(점)
데이터타입
▶ 기본형
: 실제 값을 저장
① 정수형 : byte, short, int, long
② 실수형 : float, double
③ 문자형 : char
④ 논리형 : boolean
▶ 참조형
: 기본형을 제외한 나머지로, 객체의 주소를 저장
※ 데이터 있는 그대로 보자.
"1000" != 1000 != 1000.0
문자형 정수 실수
System.out.println("1000" == 1000);
// (Error)incompatible operand types string and int
System.out.println("1000" == 1000.0);
// (Error)incompatible operand types string and float : 데이터형이 다름
System.out.println(1000 == 1000.0);
// (Warning)comparing identical expressions
System.out.println("1000" < 1000);
System.out.println("1000" > 1000.0);
System.out.println(1000 < 1000.0);
// 부동 소수점 -> 크기 비교 : Warning 안 나타남
System.out.println("1" == '1');
// (Error)incompatible operand types string and char
Java에서 모든 데이터형을 문자열로 반환됨
연산자
public class MiniCalc {
public static void main(String [] args) {
// 100 + 300 더하기 출력
// 출력 후 커서 위치 확인
System.out.print("100 + 300 = ");
System.out.println(100 + 300);
System.out.print("200 - 100 = ");
System.out.println(200 - 100);
System.out.print("100 * 100 = ");
System.out.println(100 * 100);
System.out.print("100 / 100 = ");
System.out.println(100 / 100);
}
}
100 + 300 = 400
200 - 100 = 100
100 * 100 = 10000
100 / 100 = 1
※ 오류 적게 내는 방법
① 가독성을 위해 데이터와 데이터 사이 한칸 띄어쓰기
가로 화면 이상으로 코드가 긴 경우, 다음 줄에 쓰자
② 명령어(식별자) 사이 한칸 띄어쓰기
+ 프로그래밍할 때 갖추면 좋은 마인드 : 항상 사용자를 염두에 두고 개발하려고 노력할 것.
변수 ( Variable )
① 변수의 사용 목적
- 컴퓨터 프로그램 = 코드(명령) + 데이터 로 구성 / 데이터는 메모리에 저장
- 컴퓨터 메모리(RAM, Random Access Memory) :값을 저장할 수 있는 수많은 주소들로 구성
- 메모리에 값을 저장하기 위해서는 변수 선언 및 값 지정이 필요
메모리 중 어디에 저장할지는 Java가 알아서 저장함 = JVM이 하는 일
( JVM에 대해서는 내일 배움 )
- 메모리 주소는 1byte 단위로 할당
0 에서 CPU의 bit 처리 주소만큼 메모리 주소 대체 가능
② 데이터를 메모리에 저장하는 방법
- 상수 : 메모리 상에 자리를 차지한 후, 값 변경 안됨 / 1회성 자료( 사용하는 시점에만 존재 / 명령 종료 후 소멸됨 )
※ 데이터는 기본적으로 상수로 지정하자.
- 변수 : 메모리 상의 일정한 자리에 지정한 후, 데이터의 출입 자유로움 / 언제든 접근 가능한 자료
단, 메모리 주소 직접 찾아갈 수 없음
위치는 java가 알아서 임의로 배치 → 위치 배치 후, 변경 안 됨
→ 변수의 활용으로 프로그램의 유동성 증가 / 유지보수 용이성 증가
public class HelloVariable {
public static void main(String[] args) {
// 변수 선언
// 자기소개 저장변수 선언
// 이름 : name -> 문자열
// 나이 : age -> 정수
// 주소 : address -> 문자열
String name;
int age;
String address;
name = "이다희";
age = 1;
address = "대한민국";
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
System.out.println("주소 : " + address);
}
}
이름 : 이다희
나이 : 1
주소 : 대한민국
Scanner 클래스
import java.util.Scanner;
public class SimpleCalc {
public static void main(String[] args) {
// 키보드로부터 두 수를 입력받아
// + - * / 연산을 하여
// 콘솔에 출력해보자.
Scanner sc = new Scanner(System.in);
System.out.print("키보드로부터 입력을 해주세요 : ");
// 문자열 변수 msg : 키보드로부터 입력한 값 저장
// 키보드로부터 문자열을 입력받음 (단, 연속으로 이어진 문자열까지만 해당)
String msg = sc.next();
System.out.println("입력하신 내용은 " + msg + "입니다.");
int x = sc.nextInt(); // 키보드 입력값을 정수로 변환
int y = sc.nextInt();
System.out.println("x + y = " + (x + y));
System.out.println("-----------------------------------");
System.out.print("계산할 첫번째 숫자를 입력해주세요 : ");
int num1 = sc.nextInt();
System.out.print("계산할 두번째 숫자를 입력해주세요 : ");
int num2 = sc.nextInt();
int result = num1 + num2;
System.out.println("계산한 결과 출력 : ");
System.out.println(num1 + " + " + num2 + " = " + result);
}
}
키보드로부터 입력을 해주세요 : 10
입력하신 내용은 10입니다.
20
10
x + y = 30
-----------------------------------
계산할 첫번째 숫자를 입력해주세요 : 10
계산할 두번째 숫자를 입력해주세요 : 20
계산한 결과 출력 : 10 + 20 = 30
< 위 프로그램을 구현하기 위한 라이브러리 >
Scanner 클래스 : 키보드로부터 데이터를 입력받아 반환
cf ) Java에서 모든 데이터형을 문자열로 반환되므로
문자열이 아닌 다른 데이터형으로 값을 반환하고 싶을 때 Scanner 클래스 이용
- 사용방법
① import java.util.Scanner - import문을 첫 줄에 명시
: Scanner가 java.util 패키지에 있음을 compiler에게 알려주는 역할
첫 줄에 입력하지 않을 경우, Compile Error ( Scanner cannot be resolved to a type ) 뜸
② Scanner sc = new Scanner ();
: 새로운 Scanner를 생성해 변수 sc를 사용하겠다는 의미
③ Scanner sc = new Scanner ( System.in );
: 컴퓨터의 입력장치( = 표준입력 )으로부터 입력을 받는 기능을 생성시키라는 의미
- sc.next( );
: 띄어쓰기 이전까지 입력된 문자열 읽음
- sc.nextInt( );
: 입력받은 값을 정수형으로 반환
NumberGuessingGame 만들어보기
< 숫자 추측게임 >
- 필요한 재료 : 서로 게임할 상대 - 나, 컴퓨터
- 게임 규칙 :
1. 컴퓨터가 숫자를 하나 생각합니다.
이 숫자는 임의의 숫자이어야 합니다.
2. 대결자(=나)에게 문제를 풀어보라는 기회를 준다.
키보드로 입력하는 기능 필요 (Scanner, .nextInt)
3. 입력한 답을 컴퓨터가 생각한 값과 비교해서
정답 여부를 판정 == 판정루틴 (중첩 if문)
생각한 수 > 입력한 수 : 입력하신 정수가 낮습니다.
생각한 수 < 입력한 수 : 입력하신 정수가 높습니다.
생각한 수 = 입력한 수 : 정답
4. 게임을 계속할 지 결정
import java.util.Random;
import java.util.Scanner;
public class NumberGuessingGame {
public static void main(String[] args) {
// 1. 컴퓨터가 임의의 숫자를 생각한다. */
// 자바에서 난수를 발생시키는 방법이 몇가지 있음
// Random 클래스(=외부기능) 사용
Random numberGuessGen = new Random();
// 컴퓨터가 생각한 수를 기억하는 변수 선언
// answer 라고 선언
// 난수를 발생시킬 범위{=seed값}
// 예제 0 ~ 100 까지 == 0 <= 난수 < 100
// 1 ~ 100까지 변환하려면
// == (0 + 1) <= (난수 + 1) < (100 + 1)
// 0은 포함, 100은 포함하지 않는 난수
int answer = numberGuessGen.nextInt(100) + 1;
int myGuess; // 내가 추측한 값
/* 2번 키보드 입력 */
// 키보드로부터 사용자가 숫자를 입력한다.
Scanner sc = new Scanner(System.in);
// 숫자를 맞추려고 시도한 횟수
// 랭킹 판정기준
int tryNumber = 0; // 아직 게임 시작 안함
/* 3번 게임 시작 : 게임을 한번은 실행해보려고 함
* : 이런 경우, do ~ while문이 적격
*/
do {
System.out.println("Q. 숫자를 추측해 보세요 : ");
myGuess = sc.nextInt();
tryNumber = tryNumber + 1;
// 4. 판정루틴은 프로그램 계속 여부를 판단하므로
// do ~ while 사이에 있어야 함
if ( myGuess > answer ) {
System.out.println("생각하신 수가 정답보다 큽니다.");
}
if ( myGuess < answer ) {
System.out.println("생각하신 수가 정답보다 작습니다.");
}
if (myGuess == answer ){
System.out.println(
"축하합니다 정답입니다. 시도횟수 = "
+ tryNumber);
}
} while( myGuess != answer); // 4. 계속 진행하려면, while의 조건식 == true
}
}
< Java에서 난수 발생시키는 방법 : Random 클래스 >
- 난수 : 정의된 범위 내에서 무작위로 추출된 수
① import문 첫 줄에 표기
- 직접 입력 : import java.util.Random;
- 자동 기능 추가 : 윈도우) ctrl + shift + O
② Random 객체 생성
Random numberGuessGen = new Random();
③ seed 값 설정 ( seed : 난수를 발생시킬 범위 )
numberGuessGen.nextInt(100);
→ 0 <= 난수 < 100 : 0 ~ 99 까지 무작위로 int값 반환
cf ) 1 ~ 100 까지 무작위로 int값 반환하려면,
numberGuessGen.nextInt(100) +1 ;
조건문 ( if문 )
if문 : 조건식의 결과에 따라 블록 실행 여부가 결정
if ( 조건식 ){
실행문A
} else {
실행문B
}
조건식이 true일 경우, 실행문A 실행
조건식이 false일 경우, 실행문B 실행
반복문 ( do while문 )
while문과는 달리, 블록 내부의 실문을 우선 실행하고 실행 결과에 따라 반복실행 여부를 결정
do {
실행문
} while ( 조건식 ) ;
실행문을 우선 실행 → 조건식 평가 → 참일 경우, 실행문 반복 / 거짓일 경우, do-while문 종료
※ 작성 시, while( ) 뒤에 반드시 세미콜론 ( ; ) 붙이기
수업 도중 말씀해주신 이야기들
- 코드 작성 시, 서로 관련있는 코드끼리 묶어서 가독성을 높이자
- 실행하기 전 항상 저장 먼저 하는 습관 들이자
- project 주제에 대해 미리 생각해서 재료 수집하자
단일 주제 ( 영화 예매 , 커뮤니티, 채팅, 쇼핑몰 사이트는 피하자)
주제를 세밀하게 한정짓기 + ( 챗봇, 결제 시스템, 화상채팅 ) 병행하기
예시 ) 구두 또는 가방 쇼핑몰 + 채팅시스템 ( 또는 챗봇 ) 병행
미술 경매 + 가상 갤러리 (3D)
'백엔드 > JAVA' 카테고리의 다른 글
가위, 바위, 보 게임 구현하기 예제 실습 (0) | 2023.05.02 |
---|---|
기본 계산기 만들기 예제 실습 (0) | 2023.05.01 |
1주차 ( ch3~ ch4 ) 이론 추가 (0) | 2023.04.29 |
1주차 수업내용 정리 및 주사위 게임 예제 실습 (0) | 2023.04.28 |
Java의 기본 구조 (0) | 2023.04.26 |