본문 바로가기

Java

새싹체험_java_1009

** 주말 java 과정 강의 내용 기록 _두번째 수업

키보드로 입력받기  system.in
 int keycode = system.in.read();
시스템이 가지고 있는 입력장치에서 키코드를 읽어오는 것
(아스키코드 값 == '키코드 값' 이 대입됨)

버퍼라는 임시저장소 안에 키코드 값이 저장됨
임시저장소에 저장된 값을 read() 메서드를 통해 바이트 단위로 읽는다

키코드 >> 숫자 0 :: 48 / A :: 65 / Enter :: 13,10 등 

키코드를 읽을때 (입력을 받을때에는) 콘솔창에서 입력을 받고 
입력한 내용을 읽어올텐데 system.in 은 콘솔창에 입력한 내용을 읽어올 수 있음
입력받기전에 (콘솔창을 읽어오기전에) 콘솔뷰를 열어줌

int keyCode = System.in.read(); // 컴파일 에러가 나면
throws ioException 을 quick fix로 생성해줌

system.in.read() 메서드에 대한 예외를 처리하는 예외 처리 코드이다

읽어오는 것은 예외가 발생할 수 있기 때문에 예외처리를 해주어야 함 

한글은 1바이트로 표현할 수 없기 때문에 
숫자와 영문 그리고 특수문자만 입력할 수 있다

콘솔뷰가 입력 전까지는 계속 시스템이 돌게 되어있음 

*** System.in.read() 랑 Scanner 차이
System.in.read() 
:: int와 char 모두 정수를 변수에 저장하는데 char를 출력할때는 숫자 대신
문자를 출력한다라고 정리하면 됨 /  System.in.read()의 단점은 키코드를 하나씩 
읽기때문에 2개 이상의 키가 조합된 한글을 읽을 수 없음 / 또한 키보드로 부터 입력된
내용을 통 문자열로 읽지 못함 / 따라서 단점을 보완하기 위해 자바는 scanner클래스를 제공

:: 아스키코드의 10진수로 표현됨 
Scanner 객체는 유니코드로 문자를 입력 받음 

A를 입력하면 int 로 받아서 65가 출력 됨 
Enter 값도 키코드가 있기 때문에 엔터값도 처리가 됨 (13, 10 출력)

\n (= carriage return ) :: 줄을 바꾸어주고 맨처음 공간으로 보낸다 

Scanner scan = new Scanner(System.in)
scanner 타입의 변수를 선언한다
시스템의 입력장치로 부터 읽어오는 스캐너를 생성하는 것 
사용하는 방법은 scan이라는 변수로서 사용이 가능함 

Scanner scan = new Scanner(System.in); 이클립스 실습 시작

import java.util.Scanner 
>> scanner 라는 클래스는 java.util 패키지 안에 있는데
이것을 가져와서 현재 이 프로그램에서 사용하겠다 라는 뜻
import 단축키 :: ctrl + shift + o


우리가 만들지 않은 클래스인데 어디에 있는 걸까요
자바의 표준 라이브러리 (버전에 맞게끔 라이브러리가 만들어짐)
java.base 라는 압축파일 안에 무수히 많은 패키지가 있지요 
이 안에 java.util 이라는 패키지를 열어보면 무수히 많은 클래스 파일이 있고
그 중에 Scanner 라는 클래스를 찾을 수 있음 
>> 이 안에 scanner 클래스가 있음

scan.next(); 로 문자열을 출력 (공백전까지 입력한 문자열을 읽어온다 :: 엔터/스페이스 포함한 여러가지 공백)

sfsfdf afafaf 이렇게 공백 입력하면 아래와 같이 공백 전까지만 읽어옴
sfsfdf

scan.nextInt() 로 호출해서 문자열 입력하면 아래의 타입미스매치 익셉션 발생
java.util.InputMismatchException
** 정수로 읽어올 수 있고 공백 전까지만 읽어옴 

**실수도 읽어올 수 있음 / 공백전까지 
scan.nextDouble();
scan.nextFloat(); 

scan.nextLine(); // 라인 전체 공백을 포함해서 데이터를 읽어옴 
주의사항:: next()나 nextInt()등을 쓰고 nextLine을 쓸 경우 남아있는 엔터를 
읽어오기 때문에 남아있는 엔터를 처리한 후에 사용해야 한다 

키보드가 있고 / 버퍼(임시저장소) / program
키를 입력하고 엔터를 입력하면 임시저장소에 엔터값도 있고 A값도 있음 
A라는 문자열로 취급을 했을 때 
next( ) 는 엔터값 전까지만 읽는데
아직 엔터값이 남아져 있음 
nextLine() 메서드로 공백을 빼줌 // 얘는 공백을 읽을 수 있는 메서드니까
버퍼안에 있는 공백을 데이터로 인식해서 nextLine 호출시에 공백을 출력해주는 것 (엔터처리)

scan.close() ; 

키보드와 프로그램은 연결이 되어 있는 상태기때문에
키보드와 연결된 장치를 해지해주어야 함 
자원의 낭비를 막히 위해 close 메서드를 통해서 연결된 스트링을 닫아주는 것

사실상 키보드랑 프로그램 간에는 해지해줄 필요가 없지만
나중에 file 이나 network를 사용할 때에는 연결된 장치를 반드시 해지를 해야해서
그 습관을 들이기 위해 연습하길 추천

====================================1교시 끝 

연습의 시간 ~~
집에서 입출력 연습을 많이 많이 해보세욤

연산자 나갑시다잉 연산자는 굉장히 쉬워요....라고 하셨지만 절대 아님..
연산자를 자유롭게 사용할 수 있을때까지 연습!

데이터를 처리하여 결과를 산출하는 것을 연산이라고 함
연산자 > 연산에 사용되는 표시나 기호 (+ , - , * , / , ==)
피연산자 > 연산자와 함께 연산되는 변수 또는 데이터 

산술 :: 사칙연산 및 나머지 연산 
부호 :: 음수와 양수의 부호 + - 
문자열 :: 두 문자열을 연결하는 문자열 결합 연산자 + 
>> 피연산자 중 한쪽이 문자열이면 + 연산자는 문자열 결합 연산자로 사용되어
피연산자를 문자열로 변환하고 서로 결합함 

증감 :: 피연사자의 값을 1만큼씩 증가/ 감소 (후위연산/전위연산)
비교 :: 값의 비교 / 피연산자의 대소 또는 동등 비교해서 true/false 를 산출 
논리 :: 
> 논리곱 && AND 연산자(하나라도 false 이면 false) 
> 논리합 || OR 연산자 (하나라도 true 이면 모두 true)
> 논리부정 ! NOT 연산자 (피연산자의 논리값을 바꿔줌) 

대입 :: 
> 단순대입 >> 우변값을 좌변의 변수에 대입 >> 우측의 피연산자 값을 왼쪽 변수에 할당(대입) 
> 복합대입 연산자 >> += , -= ,*=, /=, %=

삼항연산자 :: 3개의 피연산자를 필요로 하는 연산자 
조건식(피연산자 1) ? 값 OR 연산식(피연산자 2) : 값 OR 연산식 (피연산자 3);

** 조건식 :: 어떠한 연산을 했을 때 결과가 true 나 false라는 논리값이 나와야 함 

연산의 방향과 우선순위
프로그램에서는 연산자의 연산방향과 연산자 간의 우선순위가 있음
논리보다는 비교의 우선순위가 높음 (비교의 결과값으로 논리가 나와야 하니까 하위개념이라 그렇다 생각해도 될듯)

a= b= c= 7; // a,b,c 모든 값이 7이 됨 

이제 연산자 나갈거에욤

같은 타입의 변수를 선언할때는 콤마를 사용할 수 있음 
int i, j ;

증감연산자의 독립사용일 때는 단순히 1증가 1감소라고 생각하면 되지만
y = ++x;  // x 를 1 증가시킨 후에 y= x 를 실행함 

증감연산자의 독립사용이 아니고 대입 연산자를 함께 사용할 때는 
연산과정이 달라져서 결과가 다르게 나올 수 있음 
y = x++; // y = x 를 실행 한 후에 x 를 1증가


====================================2교시 끝 

연산자 연습~~ (산술 / 비교 / 복합대입 /문자열결합)
 
int a = 10;
int b = 20;
String test = "값";

System.out.println(a + "test" + (b + a) + test); // 10값 30값

System.out.println("홍길동의 나이:: " + (2 + 10 + 5)+ "살"); // 홍길동의 나이 2105살

***동전교환하기 예제 >> 다시 연습해보자!
아직도 연산자 쓸때 너무 어렵게 생각해서 문제를 꼬아푸는 습관이 있음 ㅠㅠ
좀 더 쉽게 풀어서 연산하고 중간 중간 sysout으로 값 확인하면서 연산해보기!

3항 연산자 (=조건 연산자)
물음표의 조건식에 따라 실행문이 선택됨 
조건식을 만들어줄때는 결과는 논리값이 되도록 만들어주어야 함 
3항 연산자 실습은 거의 안함 

수업 했던거 폴더로 가져가려면 file system 으로 가져가도 되고
압축파일로 가져가려면 archive로 가져가면 됨 (단순 zip 파일임)

existing into workspace 해서 임포트 하면 됨

war 는 배포시에만 사용함 (web프로젝트 일때만 나옴 / 나는 ide가 web 엔터프라이즈 버전이라서 나온거임)

java 제어문 / 조건문 

프로그램은 위에서부터 아래로 실행하는 흐름을 가지고 있음 
이러한 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 하는 것을 
제어문이라고 한다 / 제어문의 종류는 조건문과 반복문이 있음 

조건문은 조건식에 따라 실행문을 선택적으로 실행하기 위해 사용됨

조건문  :: if문 switch 문
반복문의 종류 :: for문 while 문 , do while 문

if문은 조건식의 결과에 따라 블록 실행 여부가 결정됨 
조건식에는 true/ false 값의 연산식이나 boolean 타입의 변수가 올 수 있음 

if else / if else if문까지 나감 
====================================3교시 끝 

if 문 실습 시작
연산자를 사용해서 식을 많이 많이 만들어볼 것

파이썬은 80 <= grade < 90 이렇게 가능하다고 함


// 2개의 정수를 입력 받고
// 몇번째 입력받은 수가 큰 수 인지 if else 로 조건에 따라 실행문 달리하기

난이도 좀 올리신다고 함 
// 정수 3개를 입력받아 최대, 최소 , 평균 구하기

// 정수 3개를 입력받아서 작은수부터 나열시키기 (이거 다시 연습해보기)
** 수바꾸기 연습
num1을 가장 작은 수로 만들어야함
num1이 더 크면 num2와 num1을 바꿔야함 / num2랑 num3 비교해서 num2가 더 크면 바꿔주면됨 
if else 문으로는 안된다고 하시는데 될거같은데 이따 끝나고 한번 해보자 
각각 비교해야해서 모든 조건을 타야하니까 if문으로만 가능 

** 임시변수 이용한 수 바꾸기 연습 좀 더 해보기 

====================================4교시 끝 

오늘은 switch 문까지만 하고 for문은 다음주에 나갈 예정
switch문은 if문과 마찬가지로 조건 제어문인데 변수 값에 따라서 실행문이 달라짐 

switch문 조건 안에는 정수만 들어올 수 있음 / char 타입은 내부적으로 정수로 저장되기 때문에 들어올 수 있음 
문자열이 들어올 수 있는 이유 
문자열마다 각각이 가지고 있는 정수 해시코드가 있기 때문에 들어갈 수 있음 
같은 문자열이라면 같은 정수값을 가지고 있음 
** 변수또는 값만 와야함 / 리턴값이 정수가 아닌 조건식이나 불리언타입 올 수 없음
** switch문 조건식 안에서 정수 연산해도 결과가 정수이니까 가능
** 실수는 들어갈 수 없음 

switch문 조건식 안에 있는 string 과 case값 에 있는 string 데이터의 각 해시코드를 비교하는 것

// switch문을 사용해서 A학점부터 F학점까지 나누기
// 주민번호를 입력받아 성별 맞추기

토요일 반복문 들어가고 + 배열 끝낼 예정
일요일에 메소드 > 클래스 넘어 갈 예정 

조건문이나 반복문 보다도 확실히 순수 연산하고 식을 만드는 부분이 가장 약한 것 같다는게 오늘 수업의 느낀점....

연습 많이 하자 !!! 

1009 수업끝