본문 바로가기

programming/Gukbi

국비 교육 4일차 - 연산자, 제어문

728x90
반응형

오늘까지 연산자를 신나게 배우고 제어문을 아주 조금 들어갔다. 

 

그래서 새로 배운 연산자는 대입 연산자, 삼항연산자 정도여서 그것만 정리를 하고 넘어가겠다. 

 

/*
 * 	대입 연산자 (=)
 * 	복합 대입연산자 ( +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^=)
 * 				*논리연산자, 비교연산자는 제외
 * 
 * 	=====================================================
 * 	대입 연산자 : 값을 대입
 * 			   1. 초기화
 * 				  int a = 10; 10을 a라는 메모리 공간에 대입해라
 * 				  ====> 
 * 				  <==== 대입연산자는 뒤에서 부터
 * 			   2. 연산결과를 대입
 * 			   int a = 10+20
 * 						======= 연산처리 (결과가 어떤 데이터형인지?)
 * 						double d = int + double
 * 	복합 대입연산자 : 연산자 두 개가 합쳐져서 한개의 연산자가 만들어 진 것 
 * 				  +=, -=, *=, /= ... 
 * 				
 * 				  예) int a =10;
 * 					 a+=1; ==============> a=a+1
 * 					 한개를 증가하는 방법 
 * 					 a++
 * 					 ++a
 * 					 a+=1
 * 					 a=a+1
 * 					 ===========> a=11  
 * 					 int a = 10;
 * 					 a-=5; a=a-5; 둘 다 결과 값 a=5
 *  				
 *  				10<<=3
 *  				a<<=3; =====> a=a<<3 10*2^3 ==> 10*8 ==80
 *  				1010(000)  ==> 1010000 (64+16=80)	
 *  
 *  				int a = 10;
 *  				a>>=3; =======> a=a>>3  10/2^3 ==> 1
 *  				10 = 1010 => 뒤에서부터 3개를 버린다. ==> 1
 *  
 *  				
 *  
 *  					
 * 
 */
public class 대입연산자_1 {

	public static void main(String[] args) {
		int a = 10; 
		System.out.println("a="+a);
		a+=5;
		//증가 후에 출력
		System.out.println("a="+a); // a=15
		
		a=10;
		System.out.println("a="+a);
		a=-5; // 감소 => a=a-5 
		System.out.println("a="+a);
		
		a=10; 
		System.out.println("a="+a);
		a*=3; // a=a*3
		System.out.println("a="+a); //30
	}

}

대입연산자의 핵심은 계산 방향이 --> 가 아니라 <--라는거다. 

예를 들어 a=5; 라는 명령어는 

5라는 값을 'a'라는 공간에 넣으라는 명령어이다. 

 

그렇기 때문에

	int b = 10+20;
	System.out.println(b); //30

10과 20을 먼저 산술연산자로 더해주고, 그 값을 b에 저장해줘서 b=30 이라는 결과가 나올 수 있다. 

 

쓰다보니 연산자들의 처리 우선순위가 궁금해져서 찾아봤다. 책에 있길래 정리를 해보자면

단항>산술>비교>논리>삼항>대입 연산자 순으로 높다. 

 

그리고 시험에 나오는것 같다. 책에 그렇게 쓰여있다.. 나중에 아마 더 자세히 봐야할것 같다. 

 

 

다음은 삼항연산자

/*
 * 	삼항연산자
 *  형식) 
 *  	조건? 값1 : 값2
 *  	===
 *  	true ==> 값1
 *  	false ==> 값2
 *  
 *  	결과값은 알 수 없다. 
 *  
 *  	boolean bCheck = (조건)? true:false
 *  	char c= (조건)? 'A':'B'
 *  	int i = (조건)? 0:1
 *  	String d= (조건)?"남자":"여자"
 *		
 *		/// 결과값이 고정 => 부정연산자, 비교연산자, 논리연산자 ==> 결과값이 boolean으로 고정
 *		산술 => int + int, int + double (고정되어 있지 않음)
 *		  
 */
public class 삼항연산자 {

	public static void main(String[] args) {
		
		char c='K';
		boolean bCheck=c>='A'?true:false;
		System.out.println(bCheck);
		
		int a =33;
		String s=a%2==0?"짝수":"홀수";
		System.out.println(s);
		
		int num=1; 
		char sex = (num==1 || num==3)?'남':'여';
		System.out.println(sex);
		
		
	}

}

 

수업 듣기전에는 몰랐던 연산자인데, 낯설긴 하지만 어렵진 않았다. 

(조건)? 값1 : 값2 이렇게 써주고, 조건이 true이면 값1, false이면 값2가 나온다. 

근데 보통은 if 문으로 처리하는데, 이건 한 줄로 끝나는 코드기 때문에 더 간편해서 종종 쓰는 듯 했다. 

 

그 외에 정리할때 중요하다고 짚어주신 부분은

1. int / int는 int로 나오기 때문에 정확한 결과가 나오지 않을 수 있다는 것

2. 데이터형을 잘 볼것. 작은 데이터형과 큰 데이터형을 연산하면 자동으로 큰 데이터형으로 변경되지만, 

작은 데이터 형으로 변경해서 넣어주려고 하는 경우에는 오버플로우가 발생할 수 있다. 

3. ++, -- 의 단항 연산자의 경우 변수에 대입을 해줄때 순서의 차이로 값이 달라질 수 있으니 주의할 것. 

4. 논리 연산자의 효율적 계산이 있었는데, 이거는 더 자세히 써야할 것 같아서 아래에 따로 적겠다. 

 

/*
 * 	연산자 종류
 * 	&& || ===> 결과값 (true, false)
 * 	(조건) && (조건)
 * 	====     ==== 비교연산자
 * 	
 * 	(조건) || (조건)
 * 	====     ==== 비교연산자
 * 
 * 	결과값
 * 
 * 			&& => 직렬
 * 			|| => 병렬 
 * 	=================================================
 * 		(조건) && (조건)			(조건) || (조건)
 * 	=================================================
 * 		true && true = true 	true  ||  true = true 
 * 	=================================================
 * 		true && false = false	true  ||  false = true 
 * 	=================================================
 * 		false && true = false	false  ||  true = true 
 * 	=================================================
 * 		false && false = false	false ||  false = false
 * 	=================================================
 * 	&& : false가 한개 이상이면 => false, 두개의 조건이 true => true
 * 		=> 범위안에 있는 경우
 *  	예) 90에서 100사이면 => A
 *  		score>=90 && score<=100
 *  || true가 한개 이상이면 => true, 두개의 조건이 false => false
 *  		=> 범위 밖에 있는 경우
 *   		예) 0보다 작다, 100보다 크다
 *   			score<0 || score>100
 *   
 *   ==> 검색, 로그인 (ID/Password)
 *   ***효율적인 계산 : 오른쪽에 있는 조건을 수행하지 않을 경우 
 *   	(조건) && (조건)
 *   	====
 *   	1 
 *   			 ====
 *   			 2
 *   		===
 *   		3
 *   
 *   ======> && : 왼쪽에 있는 조건이 false면 오른쪽은 계산하지 않는다. 
 *   ======> || : 왼쪽에 있는 조건이 true면 오른쪽은 계산하지 않는다. (결과갑: true)
 *   
 * 
 */
public class 논리연산자 {

	public static void main(String[] args) {
		int a =10;
		int b =11;
		System.out.println("a<b && a==b ? " +(a<b && a==b));
		// a<b => 10<11 (true)
		// a==b => 10==11 (false)
		// true && false => false
		// 왼쪽의 조건이 false일 조건을 배치를 하면 속도가 빨라진다. 
		System.out.println("a<b || a==b ? " +(a<b || a==b));
		// a<b => 10<11 (true)
		// a==b => 10==11 (false)
		// true || false => true
		// 왼쪽의 조건이 true일 조건을 배치를 하면 속도가 빨라진다. 

	}

}

&&는 둘다 true여야 true를 반환하고, ||는 둘중 하나만 true이기만 해도 true를 반환한다. 

이게 가장 핵심 개념인데 한 가지 알아두어애 할 것은

 

(false) && (true/false) 이면 앞이 false 이기 때문에 뒤의 코드를 실행하지 않는다.

만약 연산자를 이용한 연산 코드가 있었다고해도 아예 실행되지 않았기 때문에 값이 변화하지 않는다. 

 

(true) || (false/true) 의 경우도 마찬가지이다. 이미 왼쪽에 있는 것이 true 이기 때문에, 

그 뒤에 있는 조건은 실행하지 않고 tru를 뱉어낸다. 

 

이걸 잘 기억해 둬야 할 것 같다. 

 

 

다음은 제어문이다. 

아직 한 시간 밖에 안나가서 개요만 훑은거 같긴하지만 적어본다. 어차피 내일 다시 제대로 배울것 같다. 

/*
 * 	자바에서 지원하는 제어문 
 * 	= 조건문 : 원하는 먕량만 수행 할 수 있게 만든다, 에러예상 
 * 			 - 단일 조건문 (true) => 독립문장
 * 				if (조건문)
 * 					실행문장 ==> 조건문이 true일때 수행
 * 			 - 선택 조건문 (true, false) => 삼항연산자
 * 				if (조건문) 
 * 					실행문장 ==> 조건문이 true일때 수행
 * 				else
 * 					실행문장 ==> 조건문이 false일때 수행
 * 			- 다중 조건문 ==> 한 개의 문장
 * 				if (조건문)   =====> 1. true 실행문장을 수행 => true
 * 					실행문장	=====> 2. false 다음 조건문으로 이동 	
 * 				else if = (조건문)
 * 					실행문장
 * 				else if = (조건문)
 * 					실행문장
 * 				else if = (조건문)
 * 					실행문장
 * 				else 
 * 					실행문장 =====> 해당 조건이 없는 경우에 수행 하는 문장

 * 			==========> *** 조건에 해당하는 문장이 여러개 있는 경우 
 * 				int a = 10;
 * 				if(연산자 => 1. 부정연산자, 2. 비교연산자 3. 논리연산자)
 * 				if (a%2==0)
 * 				System.out.println("짝수"); => 수행
 * 				System.out.println("a="+a); => 수행
 * 
 * 				==> 짝수, a=10
 * 
 * 				int a = 10;
 * 				if (a%2==0)
 * 				System.out.println("짝수"); => 수행(x) ==> if문 소속문장
 * 
 * 				System.out.println("a="+a); => 수행(o) ==> if와 관련이 없는 문장
 * 
 * 				====> 자바에서 지원하는 모든 제어문은 한개의 문장만 제어 할 수 있다. /{}가 없을 때
 * 				
 * 				int a = 10;
 * 				if (a%2==0){
 * 				System.out.println("짝수"); => 수행(x) ==> if문 소속문장
 * 
 * 				System.out.println("a="+a); => 수행(o) ==> if와 관련이 없는 문장
 * 				} // 괄호를 열어두면 그 안에 있는 실행문장들은 모두 if문 소속 실행문장이 됨
 * 
 * 
 * 
 * 
 * 			 - 다중 조건문 => 한개의 문장 
 * 	= 선택문 : 원하는 명령 한 개를 처리 한다
 * 			switch (정수/문자/문자열) => 다른 언어는 사용할 수 없다 (문자열) => 다중 조건문
 * 				{
 * 				case "Login":
 * 					login 처리
 * 				case "Join":
 * 				      회원가입
 * 				case "Reserve":
 * 					  예매처리
 * 					}
 * 
 * 	= 반복문 : 중복 코드 제거 
 * 			- while : 반복횟수가 지정이 안된 경우 (web) => 오라클
 * 			- do~whiel : 반드시 한 번 이상 수행할때
 * 			- for : 반복횟수가 지정이 됐을때 
 * 	= 반복제어문 : 반복문을 중단, 특정부분 제외할 경우 
 * 			- break => 반복문을 종료
 * 			- continue => 특정부분을 제외
 * 
 */
public class 제어문기초 {

	public static void main(String[] args) {
		

	}

}

이번에 드디어 else, else if의 차이를 이해한 기분이다. 

솔직히 무슨 차이인지 모르고 되는대로 썼는데 강사님이 처음부터 차근차근 도식화해서 그려주셔서 이해하기 편했다. 

 

천천히 나가는 진도지만 이런 점에서는 만족하는 중이다. 

 

이해한거는 아이패드로 다시 그려서 정리해서 올리도록 하겠다. 

 

일단 오늘은 복습 여기까지

 

 

 

 

728x90
반응형

'programming > Gukbi' 카테고리의 다른 글

국비 교육 6일차 - 반복문  (0) 2020.12.31
국비 교육 5일차 - 조건문  (0) 2020.12.31
국비 교육 3일차 - 연산자  (0) 2020.12.26
국비 교육 3일차 - 형 변환  (0) 2020.12.26
국비 교육 2일차  (0) 2020.12.23