정리 노트/쌍용 KDT_(자바 Spring)

23.01.31(화) : 연산자, 변수와 자료형, 상수, 진수와 접두사

우주바다 2023. 2. 11. 17:36
728x90
 

오늘 수업 내용

01. 연산자 (분류, 종류)  
02. 변수와 자료형, 연산자 

03. 상수 (final)

+) error, 매개변수, String



01. 연산자 (Operator)     

:단항, 이항, 삼항(조건),

대입,  복합 대입, 관계, 논리, 산술, 부호, 증감, 비트 , 비트 시프트 

 

① 항의 수로 구분 :   단항 , 이항 (기본) , 삼항(조건 연산자)

② 대입 연산자(=): 우에서 좌로 결합. 이 때 우항의 데이터는 

사라지지 않는다. 그대로 존재하는 값을 참조해서 좌항에 대입된다.

int num = 7; // 8바이트 사용. (num , 7) 
// 대입한다고 7이 사라지는 게 아님. 
int num2,num3;  // 8바이트 사용(num2, num3)

 

③  복합(대입) 연산자: += , -=, *= ,/= 
  이항 연산자에서 피연사자의 값이 변하지 않는 것과 다르게 , 수행이 끝나면 값이 바뀐다.

a += 10 // "a를 10만큼 증가." 
// (a = a+10 풀어서 생각하면 오래걸림)
a  %= b         
// a를 b로 나눈 나머지값을 a에 대입.


 ④ 산술 연산자: + - * / %

 피연산자 개수로 분류하면 이항 연산자.

나누기 연산자,나머지 연산자는 둘 중 하나라도 실수 타입이면 실수를 기반으로 계산.

⑤ 관계 연산자:   >, <, >=, <=, == , !=
연산 결과로 항상 true/false를 반환

⑥ 논리 연산자: &&,  || 
  &&  :  논리and,   그리고  (~이면서)
  ||   :   논리or ,   또는  (~ 이거나)
  !   :           not,  논리 부정 (ex. !참 == 거짓, !거짓 == 참)

참고) SCE _ (최단거리 연산) Short Circuit Evaluation.
:비교할 때 앞에서 결과가 나오면 뒤는 계산하지 않는다.
(ex.  &&에서 앞이 false거나 ||에서 앞이 true면 계산 x)



단항 연산자에 속하는 부호, 증감 연산자.

⑦ 부호(+ , -) 
       : 단항 연산자로서 -는 부호를 바꾼다. +는 하는 일이 없다.
⑧ 증감 연산자 (++, --) 
       : 1만큼 증가, 감소한다.
       : Prefix(앞):   앞에 붙음. 지금 당장 증가시킴 .   (++a)
       : Postfix(뒤) : 뒤에 붙음. 연산이 끝난 후 다음에 다시 마추쳤을 때 증가. (a++)


⑩ 비트(단위) 연산자 ( &, | , ~, ^ )
피연산자가 비트. 연산 처리 속도가 빠름. 

조급하게 외울 건 없지만, 사용할 수 있는 상황이면 최대한 적용하면서 연습해보기.

 ~ (틸드) : bit not.   (==논리연산자의 !)
 ~11001100 == 00110011

^ : (배타적 논리합)(XOR) (Exclusive or) 

⑪ 비트 시프트 연산자 ( << , >>, >>> )

 비트열을 이동시키는 연산자. 
연산자 중 가장 빠른 비트 연산자, 그 중에서도 가장 빠른 비트 시프트 연산자.

3개짜리가 우측. (주의).

* >> : 양수일때는 >>>와 동일하지만, 
음수일때는 이동하고 앞을 채울때 0이 아니라 1로 채운다.

b  << 3   //  b의 비트열을 왼쪽으로 3칸 이동(bit shift)
b  >> 3  //  b의 비트열을 오른쪽으로 3칸 이동
b  >>> 3  // b의 비트열을 오른쪽으로 3칸 이동

02. 변수, 자료형, 연산자   

 

변수 선언과 초기화에서는

: 무조건 우항을 먼저 인식(컴퓨터뿐 아니라 개발자도.)

덧셈 연산자
: 피 연산자 중 하나라도 문자열 타입이면 산술 연산이 아닌, 문자열 결합 연산 수행.

실수형 데이터 타입

: 피 연산자 중 실수형은 정수 형태와 만났을 때 , 정수를 실수로 자동 형 변환한다.

 

실습003

더보기
public class Test003 {
	public static void main(String[] args){
    
		System.out.println(    "테스트");//테스트
		System.out.println("   테스트");	//   테스트

		System.out.println(1 + 2); //산술 연산자				   //3
		System.out.println(1 + "2");  // 문자열 결합 연산자		//12
		System.out.println("1" + "2");  // 문자열 결합 연산자	//12
        System.out.println(5.0 + 10);	// 15.0 (자동 형변환)
	}
}

 


- 스코프 영역 내에서 변수명은 식별자로, 이미 선언된 변수를 재선언 할 수 없다.

- 변수명에 사용 가능한 특수문자 $, _팀 작업에서 특정한 목적이 있을 때 사용한다.

- 0으로 시작할 가능성이 있다면,  숫자 타입이 아니라 문자열 타입에 담아야 값 손실을 방지할 수 있다. 

 

실습004

더보기
public class Test004{
	public static void main(String[] args){
		
		double height = 156.1; // 8바이트 실수형
		int age = 28;		   // 4바이트 정수형
		char degree = 'A';	   // 2바이트 문자형	
		String name = "우주";
		// short age;  컴파일 에러(지역 내에서 이미 선언됨)
		String $name = "바다"; //  $ 와 _ 는 사용 가능한 특수문자로, 문법적 오류는 없지만 
		//팀 작업에서 중요한 의미를 가지므로 목적없는 사용은 권장하지 않음.
		
		// int tel = 01012345678;  // 0으로 시작할 가능성이 있다면 숫자형이 아니라
		String _tel = "01087654321"; // 문자열 타입에 담아야한다.
		String 주소 = "은하"; // 문법 오류는 아니지만 실무에서 사용 안 함.
}

printf() : print의 확장 기능으로, 개행이 없다. printf()에서는  \n을 %n으로도 표현할 수 있다.

%형식 지정자에 c,d,f 등을 붙여 서식을 지정한다.

 

실습005

더보기
public class Test005{
	public static void main(String[] args){
		
		int a = 10 , b = 5;  //같은 자료형은 ,로 구분해서 병렬 입력 가능.
			
		/*====== printf() , format()  (* jdk 1.5 이후 지원)
		 첫 번째 인자는 문자열 형태로, 출력 포맷을 지정한다.*/
		 System.out.printf("%d + %d = %d\n", 10, 20, 30); // 10 + 20 = 30
		 System.out.printf("%d + %d = %d%n", 10, 20, 30); // 10 + 20 = 30

		System.out.printf("%d 과 %d\n", 10, 20); // 10 과 20
		// System.out.printf("%d 과 %d\n", 10, 3.14); (런타임 에러)
		System.out.printf("%d 과 %f\n", 10, 3.14); // 10 과 3.140000
		System.out.printf("%d 과 %.2f\n", 10, 3.14); // 10 과 3.14
		System.out.printf("%f %n", 3.141592); // 3.141592
		System.out.printf("%.4f %n", 3.141592); // 3.1416 (반올림 발생)
	}
}

명시적 형 변환, 접두사(8,16진수 )

실습006

더보기
public class Test006{
	public static void main(String[] args){
		int a = 10, b = 20;
		/*(컴파일 에러) 오버플로우(2바이트에 4바이트 int 담을 수 없음)
		short c = a;
		error: incompatible types: possible lossy conversion from int to short*/
        
		//명시적(강제) 형 변환 
		short c = (short)a;
		System.out.println("c의 결과: " + c); // c의 결과: 10
		
		int e = 030;			
        	// 접두사가 0이면 8진수로 인식.(8의 자리 x 3 = 24)
		System.out.println("e의 결과: " + e); // e의 결과: 24 

		int f = 0xa6;			
        	// 접두사 0x 는 16진수 (hex) ( (16의 자리 x 10) + 6)
        	// 0 1 2 3 4 5 6 7 8 9 a b c d e f 
		System.out.println("f의 결과: " + f); // f의 결과: 166
	
		float g = 0;			// int가 float로 자동 형 변환 후 대입 ( O )     
		//float h = 0.0;		// double은 float로 자동 형 변환 불가( X ) 컴파일 에러
		float h = 0.0f;			// 명시적 형 변환으로 대입.
		System.out.println("g의 결과: " + g);  // g의 결과: 0.0
		System.out.println("h의 결과: " + h);  // h의 결과: 0.0
	}
}

자료형 실습:

boolean, char, double

실습 007, 008, 009

더보기
public class Test007{
	public static void main(String[] args){
		boolean a = true;
		boolean b ; 
		int c = 10, d = 5; //===> 여기까지 총 19바이트 할당
		b = 200 > c;		// true
		b = c < d;			// false
	}
}
public class Test008{
	public static void main(String[] args){
    		char a = 'a'
    		int a = (int)a;
    		System.out.println("a: "+ a); 
        	// a: 65 (좌측 클립텍스트 메뉴에서 아스키 확인 가능)
	}
}
public class Test009{
	public static void main(String[] args){
		double a = 1 / 2;
		System.out.println("double a: " + a);	// double a: 0.0
		//  나눗셈의 피 연산자가 정수면 몫만 취한다. 
		// int 기반 연산 후 double에 대입 -
	
		double b = (double)1 / 2;  // 1을 double로 바꾼 후(1.0), 2로 나눈다.					
		double c = (double)(1 / 2); // 괄호는 우선순위가 높음. 							
		System.out.println("double b: " + b); // double b: 0.5
		System.out.println("double c: " + c); // double c: 0.0

		double d = 1/2 + 1/2;
		System.out.println("double d: " + d); // double d: 0.0
	}
}

03. 상수 (final)

final 키워드는 다양한 곳에 사용할 수 있는데 변수 선언 시,  자료형 앞에 붙이면 상수로 만들어준다.

상수의 변수명은 모두 대문자로 작성하며, 여러 단어라면 _로 구분한다 ( PEN_COLOR)

 

실습 010, 011

더보기
  // 원의 넓이와 둘레를 구하는 프로그램 		
public class Test010{
	public static void main(String[] args){	
		/*---------/   내 풀이   /--------*/
		int r = 10; 
		double pi = 3.141592;
		double width = pi * (r*r);
		double length = pi * (2*r);
       
		System.out.println("width: " + width );
		System.out.println("length: "+ length);
        
		/*--------/  강사님 풀이  /--------*/		
		// 변수
		int r = 10;					
		final double PI = 3.141592;								
		double area, length ;	
		// 연산
		area = r * r * PI;
		length = r * 2 * PI;
		// 결과 
		System.out.printf("넓이: %.3f%n", area); 
		System.out.printf("둘레: %f\n", length); 
	}
}
/* 직사각형의 넓이와 둘레를 구하는 프로그램 .
------------------------------------------------*/
public class Test011{
	public static void main(String[] args){
		//변수
		int h = 10;
		int v = 20;
		int width, length;
		//연산
		width =  h * v;
		length =  (h + v) * 2;
		//결과
		System.out.println("넓이: " +  width);
		System.out.println("둘레: " + length);
	}
}

+) error, 매개변수, String

더보기

[ 오류. error ]
오류 메세지를 100% 신뢰하면 안 된다.
어떤 부분이 오류라고 나와도 , 오히려 그 부분에는 문제가 없고

그 주변 다른 곳에서 영향을 받았을 수 있음.
따라서 단어를 번역해가면서 꼼꼼하게 볼 필요는 아직 없음. 
하다보면 다양한 에러 타입 포맷에 익숙해짐.
컴파일 에러, 런타임 에러 : javac 단계와 exe 단계의 에러를 구분.

[ 매개변수 (인수, 인자, 파라미터) ]
함수에 쓰기 위해 넘겨주는 변수.
in -------> [  f(x) ] ------> out
매개변수      함수            결과 

 [ String ] 
* String 은 객체다. 왜 기본형 타입이 아닐까?
1. 실수(float,double) 와 마찬가지로 무한대 길이로 인한 약속의 어려움.
2. 고정 길이가 아니므로 필요 메모리를 예상할 수 없다.
* 다른 기본형 타입처럼 선언, 선언과 초기화 가능.


체크 포인트:

삼항연산자 == 조건연산자, 비트, 비트 시프트 연산자. 

오늘 느낀 점 :
연산자에 대해 개략적으로 알고 있었는데

꼼꼼하게 이론 확인 후 실습으로 더  익숙해질 수 있었다.
변수 선언, 처리, 결과출력 순서로 프로그램을 처음 만들었다.
단계별로 설계하니 재밌고 가독성이 좋다. 

728x90
반응형