백엔드/JAVA

STS 환경설정 및 프로젝트 생성과 예제 실습

두개의 문 2023. 4. 27. 20:14
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() 메소드를 만들지 않은 경우 아래 사진과 같이 실행시킬 파일이 없음
 

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)