2day

2023. 12. 11. 12:44자바 기초 및 세팅

1day에 배운 내용 

 변수

- 변수를 선언 할 수 있다.

 

변수 선언 방법

-자료형 변수명;

-자료형 변수명 = 값;

 

자료형의 종휴

- 기본 자료형

 - 값을 저장

 - 문자, 정수, 실수, 논리

 - 바이트가 클수록 넓은 범위를 저장

-참조 자료형

 - 주소를 저장(값을 알고 있는 누군가의 주소)

 - 문자열 : String(현재까지 이것만 배웠음)

 

문자 VS 문자열

- 문자는 ''로 되어 있지만 문자열은 " "으로 되어 있다.

- 문자는 반드시 한 글자, 단 \로 시작하는 경우 다양한 값이 올 수 있지만 결국 한 글자를 의미

- 공백을 넣으려면 ' '안에 스페이스를 넣어줘야한다. 

- 문자열은 null로 초기화를 할 수 있다. 문자열은 0글자 이상이다. char은 무조건 공백이든 글자든 숫자든 하나가 무조건 들어가야한다.

 

 변수명 작성 규칙/관례

규칙

- 숫자는  첫 문자로 올 수 없다.

- 특수문자는 _와 $만 가능

- 키워드는 사용 할 수 없다.

- 대소문자를 구분

 

- 카멜 표기법 : 두 단어로 된 경우 두번째 단어부터 첫글자만 대문자로

- 변수명은 의미 있게

 

자료형 변환

- 타입이 다른 값을 변수에 저장 할때 저장 하려는 값 또는 변수에 타입을 바꾸는 것을 자료형 변환이라 합

- 자동

 - 작은 값을 큰 값에 저장하는 경우

 - 정수를 실수로 

 

- 강제

  - 큰 값을 작은 값에 저장할 경우

  - 실수를 정수로 

  - 필요에 의해, 문법적으로는 에러가 발생하지 않지만 원하는 결과를 위해 자료형 변환(나누기)

 

다음 문제에 맞는 답은?

1. 문자를 표현하는 자료형은? 

char

2. 정수를 표현하는 자료형은

byte, short, int, long

3. 실수를 표현하는 자료형은?

float, double

4. 논리를 표현하는 자료형은?

boolean

 

다음 코드에서 잘못된 부분이 있으면 수정하세요.

1. int 9num = 10; # 변수명시작 숫자 x

2. int char = 20; #char은 변수명이 될 수 없음

3. char ch = 90; # 90을 문자로쓰고 싶다면 String"90"을 하면 된다. ch는 문자 1개 밖에 저장이 안된다. '' 안에 들어가 있어야한다.

4. int pi = 3.14; # int형은 정수형이므로 3이 저장 된다. 3.14를 저장하고 싶으면 float, double를 사용한다.

 

연산자

연산자 : 연산에 사용하는 기호

항 : 연산에 사용하는 값

예 : 1 + 2

연산자 : +

항 : 1, 2

항의 개수에 따라 단항, 이항, 삼항 연산자로 구분

대입연산자

변수에 값을 대입(저장)하는 연산자 == 변수의 값이 바뀜

오른쪽에 있는 값(식 또는 변수 또는 리터럴, 상수)을 왼쪽에 저장

이항 연산자 중 우선 순위가 가장 낮음

=> 여러 연산자가 있는 경우 연산을 모두 다 한 후 대입 연산자가 실행 

왼쪽에는 변수나 상수만 올 수 있음

 

산술 연산자

+,-,*(곱하기),/(나누기), %(나머지)

+, -, *는 일반 수학과 같음

/ : 일반 수학과 다름(중요)

% : 나머지를 구하는 연산자. 5 % 3 == 2

 

정수 / 정수 => 정수 (소수점이 버려질 수 있음)

정수 / 실수 => 실수

실수 / 정수 => 실수

실수 / 실수 => 실수

package day2;

public class ArithmeticOperator {
	//산술연산자 예제
	public static void main(String[] args) {
		int num1 = 1, num2 = 2;
		
		System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
		System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
		System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));
		System.out.println(num1 + " / " + num2 + " = " + (num1 / num2));
		System.out.println(num1 + " % " + num2 + " = " + (num1 % num2));
		// /와 %는 0으로 나눌수 없다. 예외가 발생할 수 있다.
		num2 = 0;
		
		//정수 / 0은 예외 발생
		System.out.println(num1 + " % " + num2 + " = " + (num1 % num2));
		//정수 /0.0은 예외가 발생하지 않고 무한대로 계산된다.
		System.out.println(num1 + " % " + num2 + " = " + (num1 % (double)num2));
	} 
}

증감연산자

++, --

최종적으로 변수가 1증가/1감소

위치에 따라 전위형/후위형으로 나뉨

++변수 : 전위형, 증가하고 실행

변수++ : 후위형, 실행하고 증가

전위형 후위형이 헷갈리면 둘 중 한가지 방법만 통일해서 쓰자!!

package day2;

public class PrefixIncrementOperatorEx1 {
	
	// 증감연산자 예제
	public static void main(String[] args) {
		int num1 = 1, num2 = 1;
		// num1은 전위형증가 연산자, num2는 후위형 증가 연산자.
		
		System.out.println("증가 전 num1 = " + num1 + ", 증가 전 num2 = " + num2);
		//num1은 1에서 2로 증가 후에 "증가 중 num1"이라는 문자열과 더함
		//num2는 "증가 중 "증가 중 num1 = " + ++num1 + ", 증가 중 num2 = " 이후에 증가함
		System.out.println("증가 중 num1 = " + ++num1 + ", 증가 중 num2 = " + num2++);
		System.out.println("증가 후 num1 = " + num1 + ", 증가 후 num2 = " + num2);
		
		System.out.println("===========================================");
		//전위형과 후위형 동작이 잘 이해되지 않아 전위형 하나만을 이용하여 후위형도 구현
		num1 = 1; num2 = 1;
		System.out.println("증가 전 num1 = " + num1 + ", 증가 전 num2 = " + num2);
		++num1; //num1 = num1 + 1
		System.out.println("증가 중 num1 = " + num1 + ", 증가 중 num2 = " + num2);
		++num2; // num2= num2 + 1
		System.out.println("증가 후 num1 = " + num1 + ", 증가 후 num2 = " + num2);

	}

}

 

비교(관계)연산자

값의 크기를 비교하는 연산자

>, <, >=, <=, ==, !=

항을 같은 타입으로 변환 후 비교

결과 값은 true 또는 false

참조형에는 ==, !=만 사용 가능

문자열은 ==로 비교하면 안됨 : 문법적으로는 에러가 발생하지 않지만 두 문자열이 같은지 다를지를 제대로 비교하진 않음 

  • str1과 str2에 리터럴 문자열 abc가 저장된 경우는 ==로 판별이 됨
  • str1과 str2가 Scanner를 통해 입력받은 문자열 abc인 경우는 ==로 판별이 안됨
  • str1.equals(str2);
package day2;

public class RelationalOperatorEx1 {
	
	//비교 연산자 예제
	public static void main(String[] args) {
		
		int num1 = 1, num2 = 2;
		
		System.out.println(num1+" >  : " + num2 +  (num1 > num2));
		System.out.println(num1+" >=  : " + num2 + (num1 >= num2));
		System.out.println(num1+" <  : " + num2 + (num1 < num2));
		System.out.println(num1+" <=  : " + num2 + (num1 <= num2));
		System.out.println(num1+" ==  : " + num2 + (num1 == num2));
		System.out.println(num1+" != : " + num2 + (num1 != num2));
		
	}

}

논리연산자

항이 boolean 값이어야 하고 결과값도 boolean

&&, ||, !

&& : ~하고, 둘다 참이면 참

  • 성적이 80점 이상이고 90점 미만이면 B

|| : ~하거나, 둘 중 하나라도 참이면 참

  • 주민등록증이 있거나 운전면허증이 있어야 토익 시험을 볼 수 있음

! : ~ 아닌, 반대, 참이면 거짓, 거짓이면 참

  • 성인이 아닌 => 미성년자
package day2;

public class LogicalOperatiorEx1 {
	
	// 논리연산자 예제
	public static void main(String[] args) {
		/* && : ~하고, ~이고
		 * A && B ㅣ A와 B는 참/거짓을 판별할 수 있는 식 또는 변수
		 * 성적이 100이하이고, 성적이 90이상이면 A, 성적이 95 => true
		 * 100이고, 90이다 A, 성적이 95 => 판별 할수가 없다 => 에러가 발생
		 * - 진리표
		 * A && B
		 * F && F => F
		 * T && F => F
		 * F && T => F
		 * T && T => T
		 * 둘 다 참일때만 참이다.
		 * || : ~이거나, ~하거나
		 * A || B
		 * - 진리표
		 * A || B
		 * F || F => F
		 * T || F => T
		 * F || T => T
		 * T || T => T
		 * 둘다 거짓일때 거짓이다.
		 * 
		 * ! : ~아닌, 반대
		 * !A
		 * F => T
		 * T => F
		 * */

		int score = 101;//성적
		
		//성적이 올바른지 확인. 올바른 성적은 0이상 100이하
		//성적이 0이상이고, 성적이 100이하이다.
		//성적이 0보다 (크거나 같고), 성적이 100보다 (적거나 같다)
		//성적이 0보다 (크거나 같고), 성적이 100보다 (적거나 같다)
		//성적 >= 0 && 성적 <= 100
		System.out.println(score + "점은 올바른 성적인가? " + (score >= 0 && score <= 100));
		// 앞 결과의 반대를 출력
		System.out.println(score + "점은 올바른 성적아닌가? " + !(score >= 0 && score <= 100));
		/* 성적이 올바르지 않은지를 확인. 올바른지 않은 성적인 0미만, 100초과
		 * 성적이 0미만이거나 성적이 100초과이다.
		 * 성적이 0보다 (작)거나 성적이 100보다 (크다)
		 * 성적 < 0 || 성적 > 100
		 * */
		System.out.println(score + "점은 올바른 성적아닌가? " + (score < 0 || score >100));
		
	}

}

연산자 예제

/* 다음 코드를 이용하여 국어, 영어 수학 성적의 평균을 구하는 구하여 콘솔에 출력하는 코드를 작성하세요 */

int korScore = 100, engScore = 50, mathScore = 92;

package day2;

public class testEx1 {
	
	
	// 연산자 예제
	public static void main(String[] args) {
		/* 다음 코드를 이용하여 국어, 영어 수학 성적의 평균을 구하는 구하여 콘솔에 출력하는 코드를 작성하세요*/
		int korScore = 100, engScore = 50, mathScore = 92;
		System.out.println("국어 영어 수학의 평균은 " + (double)((korScore+engScore+mathScore)/3)+"입니다");
		//혹은 다른 방법
		
		int sum = 0;
		double avg = 0;
		
		//총점
		sum = korScore + engScore + mathScore;
		avg = (double)sum/3;
		System.out.println("세 과목의 총합 : " + sum);
		System.out.println("세 과목의 평균 : " + avg);
	}

}

단락회로평가

논리 연산자를 이용하는 경우 연산자 왼쪽 값에 따라 오른쪽이 실행되지 않고 바로 결과가 나오는 것

&&는 하나라도 거짓이면 거짓이기 때문에 A&&B에서 A가 거짓이면 B를 확인하지 않아도 거짓임을 알 수 있음

||은 하나라도 참이면 참이기 때문에 A||B에서 A가 참이면 B를 확인하지 않아도 참임을 알 수 있음

 

복합 대입 ㅊ

연산자와 대입 연산자를 같이 써서 코드를 줄인 연산자

A = A 연산자 B;A 연산자 = B;//로 줄여 씀A = A + B;A += B;중요한 연산자는 아니지만 알아두면 편리하다.

 

조건연산자

삼항 연산자

나중에 배울 조건문으로 대체 가능

코드를 간경하게 해줌

(조건식) ? 참일 때 값 : 거짓일 때 값

중요한 연산자는 아니지만 알아두면 코드를 간결하게 작성할 수 있다.

조건식 : 결과값이 참 또는 거짓이 되는 식

1 > 2 (o), 1 + 2(x)

 

연산자 우선순위

 

정리

연산자

- 연산자 종류를 알고, 연산 결과를 예측할 수 있다.

 

대입

- =

- 오른쪽값을 왼쪽에 저장

- 왼쪽에는 변수 또는 상수가 1개만 와야함

- ==와 =는 다름!! 주의 필요

 

산술

- / : 정수/정수 => 정수, 소수점이 버려짐, 그외에는 실수

- % : 나머지 연산자, 홀짝, 약수, 배수 찾을 때 사용

- /, %은 0으로 나누기 x

 

증감 연산자

- 최종적으로 1증가/감소

- 위치에 따라 전위 후위형으로 나뉨

 

비교 연산자

- 크기비교

- 결과가 참/거짓

- >=, <= 연산자 순서

 

논리 연산자

- 결과가 참/거짓

- && : ~이고 둘다 참일때 참

- || : ~이거나 둘 중 하나만 참이어도 참

- ! : 반대

 

복합 대입 연산자

- 연산자 줄여쓰기

- A += 1형태로 쓰임

 

조건 연산자

- 조건문을 대체

- 코드를 간결하게 사용

- 조건 ? 참 : 거짓 형태로 쓰임

 

비트연산자

- 비트로 나눠서 논리연산

 

비트 이동 연산자

- 비트로 나열해서 왼쪽/오른쪽으로 비트들이 이동

 

연산자 우선 순위

- 괄호가 가장 높다.