공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 

 

 


입력받은 문자열중 대문자는 소문자로, 소문자는 대문자로 변환하기

ASCII코드표에서 소문자 97 ~ 122 와 대문자 65 ~ 90  32 만큼 차이가 나는 것(숫자는  48 ~ 57 ) 이용한다.   Scanner 로 문자열을 입력받고  tmp 에 한 글자씩 담아서 검사한다. 검사한 결과가 대문자면 소문자로, 소문자면 대문자로 바꾼다. 관련된 내장 함수에는  toUpperCase( ) toLowerCase( )가 있다.

 

 toUpperCase( )  : 문자열을 모두 대문자로 변환해준다.

 toLowerCase( )  : 문자열을 모두 소문자로 변환해준다.

 

 

결과값


1. 내장 함수 사용하지 않는 경우

대문자에서  32 를 더하면 소문자가 되고, 소문자에서  32 를 빼면 대문자가 되는 것을 이용한다. 

package test;
import java.util.*;

class test{
	public static void main(String[] args) {
	
		String input = "";	//입력받은 문자열을 저장할 input 선언
		String output = "";	//최종적으로 출력할 문자열을 저장하는 output 선언
		int tmp;
		
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("문자열을 입력하세요 : ");
		input = scanner.nextLine();	//입력받은 문자열을 input에 저장
		
		for(int i = 0 ; i < input.length() ; i++) {	//문자열을 검사하기 위해서 input의 길이만큼 반복문 실행(한글자씩 tmp에 옮겨서 검사)
			
			tmp = (int)input.charAt(i);	//문자열은 아스키코드(숫자)로 저장되기 때문에 int형으로 변환.
			
			if( (65 <= tmp) && (tmp <= 90) ) {	//문자가 65 <= tmp <= 90인 경우 (대문자인 경우)
			
				output += (char)(tmp + 32);	//32를 더해서 소문자로 변환
			
			}else if( (97 <= tmp) && (tmp <= 122)) { //문자가 97 <= tmp <= 122인 경우 (소문자인 경우)
				
				output += (char)(tmp - 32);	//32를 빼서 대문자로 변환
                
			}else {	//그 외의 문자열인 경우
				
				output += (char)tmp;	//그대로 출력
						
			}
		}
		
		System.out.println("변환된 문자열 : " + output);		// 최종적으로 변환한 글자열인 output을 출력
		
	}	
}

 

 

 

2. 내장함수 사용하는 경우(toUpperCase( ), toLowerCase( ))

두 함수는 문자열 전체를 일괄적으로 바꿔주기 때문에 한 글자씩 변환해서 바꿔야 각각의 글자를 다르게 바꿀 수 있다. 첫 번째 방법과 비슷하지만  tmp 의 자료형을  int 형에서  char 형으로 바꿨다.

package test;
import java.util.*;

class test{
	public static void main(String[] args) {
	
		String input = "";	//입력받은 문자열을 저장할 input 선언
		String output = "";	//최종적으로 출력할 문자열을 저장하는 output 선언
		char tmp;
		
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("문자열을 입력하세요 : ");
		input = scanner.nextLine();	//입력받은 문자열을 input에 저장
		
		for(int i = 0 ; i < input.length() ; i++) {	//문자열을 검사하기 위해서 input의 길이만큼 반복문 실행(한글자씩 tmp에 옮겨서 검사)
			
			tmp = input.charAt(i);	//문자열을 한글자씩 tmp에 넣는다.
			
			if( (65 <= tmp) && (tmp <= 90) ) {	//문자가 65 <= tmp <= 90인 경우 (대문자인 경우)
			
				output += input.valueOf(tmp).toLowerCase();	//내장함수를 이용해서 소문자로 변환
			
			}else if( (97 <= tmp) && (tmp <= 122)) { //문자가 97 <= tmp <= 122인 경우 (소문자인 경우)
				
				output += input.valueOf(tmp).toUpperCase();	//내장함수를 이용해서 대문자로 변환
				
			}else {	//그 외의 문자열인 경우
				
				output += (char)tmp;	//그대로 넣는다.
						
			}
		}
		
		System.out.println("변환된 문자열 : " + output);		// 최종적으로 변환한 글자열인 output을 출력
		
	}	
}

 

 

 

 

공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 

 

 

조건문 (if, switch)

 조건문은 조건과 코드가 들어간  { } 로 이루어져 있으며 조건식의 결과에 따라 프로그램의 흐름이 바뀐다. 일반적으로  if 문을 많이 쓰고 조건이 많을 때는  switch 문을 사용한다고 하지만 조건이 많은데도  if 문을 써야 하는 경우도 있다. 상황에 따라 적절한 것을 사용하면 된다.

 

 

if문

if (조건식){
    // 조건식이 true일 때 수행될 문장
}​

 if  ( ) 안에 있는 조건식이 참이면  { } 안의 문장들을 실행시킨다.

 ( ) 안에는 결과값이  true  false 인 것들만 올 수 있다.( boolean형 이나  boolean값을 반환하는 조건식 )

 

 

if문 예시

 score 의 값이  60 보다 크다면  "합격입니다." 가 출력되고,

 60 보다 작다면 아무 일도 일어나지 않는다.

 

 

  ■ if-else문

if(조건식){
    //if의 조건식이 true(0이 아닌값)일 때 수행되는 문장
}else{
    //if의 조건식이 false(0)일 때 수행되는 문장
}

 if 문의 변형인 형태이다.  if 문은 조건식이 true일 때는  if { }  안의 코드가 실행되고 false인 경우에는 아무 일도 일어나지 않는다.

 if-else 문도 마찬가지로 true일 때는  if 문과 동일하게  if { } 안의 코드가 실행되지만 false인 경우  else { } 의 문장들이 실행된다.

 

 

if-else문 예시

만약  input 0(true)이라면  "입력한 숫자는 0입니다." 가 출력되고,

 input0이 아닌 다른 숫자(false)가 나온다면  "입력한 숫자는 0이 아닙니다." 가 출력된다.

 

 

  ■ if- else if문

if(조건식1){
    //if의 조건식(조건식 1)이 true(0이 아닌값)일 때 수행되는 문장   
}else if(조건식2){
    //if의 조건식(조건식1)이 false(0)이고 else if의 조건식(조건식2)이 true(0이 아닌값)일 때 수행되는 문장
}else if(조건식3){ // 필요한 경우else if가 여러 개 들어올 수 있음
    //if의 조건식(조건식1)이 false(0), 첫 번째 else if의 조건식(조건식2)도 false(0)이고, 두번 째 else if의 조건식(조건식3은 true(0이 아닌값)일 때 수행되는 문장
}else{    //전부 해당하지 않는 것들에 대해 처리하고 싶을 때는 마지막에 else문을 사용한다(필수 X)
    //위에 나온 조건식들이 모두 false일 때 수행되는 문장
}
//전체 if문의 바깥

처리해야 할 조건식이 3개 이상인 경우에 사용한다.

주의할 점은 앞의 조건에 해당하지 않는 것들 중에서 또 그다음 조건식에 대한 참 거짓을 따진다는 점이다.

또한 해당하는 조건식이 나오면 그 블럭 {  } 안의 코드들만을 수행하고 바깥으로 빠져나온다.(주석된 부분)

 

 

if-else if문 예시

 score 의 값이  100 이므로 첫 번째  if 문의 블럭 { } 만 수행하고 바깥으로 빠져나온다.

 else if 문도 조건만 보면 맞아 보이지만 사실은  if 문의 조건식이 참이 아닌 것들 중에  score  80 이상인 조건이므로  (80 <= score) && (score < 90)과 같은 의미이다.

 

 

결과값

 

 

  ■ 중첩 if문

if(조건식1){
    //if문의 조건식(조건식1)이 true일 때 수행될 문장

    if(조건식2){
        //첫번째 if문의 조건식(조건식1)이 true이고 두번째 if문(조건식2)이 true일 때 수행될 문장 
    }else{
        //조건식1은 true지만 조건식2는 false일 때
    }
}

 if 문 안에 또 다른  if 문을 넣은 것을 중첩 if 문이라고 한다. 중첩 횟수에는 제한이 없다.

중첩 if 문은 들여 쓰기를 해서  if 문들이 서로 명확하게 구분되도록 해야 한다.

 

 

중첩if문 예시

성적을 구하는 코드의 한 부분이다.

중첩 if 문을 사용해서  score  90 점 이상인 사람들 중  95 점이 넘으면 A+를 주고,

 score  90 점 이상이지만  95 점을 넘지 않는 사람에게는 A를 주는 코드이다.

이처럼 중첩 if 문을 활용하면 조건을 세분화시킬 수 있다.

 

 

  ■ 단락 회로 평가(short circuit evaluation)

  • 논리 곱(&&)의 경우 : 두 조건이 모두 true인 경우에만 결과가 true → 앞의 조건이 false이면 뒤의 조건은 평가하지 X
  • 논리 합(||)의 경우 : 두 조건이 모두 false인 경우에만 결과가 false → 앞의 조건이 true이면 뒤의 조건은 평가하지 X
int num1 = 10;
int num2 = 100;

if ((num1 = num1 + 10) < 10 && (num2 = num2 + 100) > 100)
    System.out.println("all true");
System.out.println("num1 : " + num1);
System.out.println("num2 : " + num2);

단락 회로 평가를 확인해볼 수 있는 간단한 예시이다.

 

 

결과값

의도대로라면 num1과 num2의 값이 모두 바뀌어야 하지만 뒤의 조건 부분은 평가되지 않았기 때문에 num2의 값은 변하지 않았다.

 

 

switch문

switch(조건식){
    case 값1:
        //조건식의 결과가 값1과 같을 경우 수행 될 문장
        break;    //break문을 만나면 switch문 바깥으로 빠져나간다.

    case 값2:
        //조건식의 결과가 값2와 같을 경우 수행 될 문장
        break;

    ...

    default:    // else문 처럼 필수가 X
        //조건식의 결과와 일치하는 case문이 없을 때 수행 될 문장
}

경우의 수가 많은 경우에  if 문보다 간결하게 표현할 수 있어서 많이 사용한다.  if 문처럼 중첩도 가능하다.

다만 제약조건이 있어 경우의 수가 많다고 무조건  switch 문을 사용할 수 있는 것은 아니다.

 

 

switch문의 제약조건
1. 조건식 결과는 정수 or 문자열이어야 한다.
2. case문의 값은 정수 or 정수 상수만 가능하며, 중복되지 않아야 한다. (Java 7이후로는 문자열도 가능)

 switch 문은 조건식을 계산한 값과 일치하는  case 값을 찾아서 그 위치부터 코드를 실행시킨다.

주의할 점은 해당하는 코드만 실행시키고 조건문을 빠져나가는  if 문과 달리  switch 문은  break 를 만날 때까지 계속해서 코드를 실행한다는 점이다.

 default 문은 해당하는  case 값이 없을 때 실행되는 부분이다. 보통 마지막에 위치하지만 중간에 넣을 경우 마찬가지로  break 문을 넣어야 해당 부분만 실행되고 조건문 바깥으로 빠져나온다.

 

 

case문 예시

위의 코드를 실행시키면 어떻게 될까?

 

 

결과값

 case 1 뿐만 아니라  case 2 에 해당하는 코드가 출력되었다.  break 문이 없기 때문이다.

 switch 문에서 조건문을 빠져나오려면  break 문이 있어야 한다는 것을 알 수 있다.

 

 

 


반복문 (for, while, do-while)

 반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용한다. 조건식을 만족하는 동안 작업을 반복하는 것이므로 조건문을 포함한다.  for 문과  while 문은 비슷해서 어떤 것을 사용해도 기능에 차이는 없으나 보통 반복 횟수를 알고 있을 경우에는  for , 반복 횟수를 모를 때는  while 을 많이 사용한다. 또한  for 문이나  while 문에 속한 문장은 조건에 따라 한 번도 수행되지 않을 수도 있지만  do-while 무조건 최소 한 번은 수행된다는 차이점이 있다. 반복문을 잘못 작성하면 무한루프가 되기 때문에 주의해서 쓰자!

 

 

for문

for(초기화 ; 조건식 ; 증감식){
    //조건식이 참일 때 수행될 문장
}

 

    초기화 :  for 문에 사용될 변수를 초기화하는 부분이며 처음에 한 번만 수행된다.
                 여러 개의 변수를 쓸 경우 타입이 같아야 하고. 콤마( , )를 사용해서 구분한다.
    조건식 : 반복할 때  true  /  false 를 따질 조건식
    증감식 : 반복문을 제어하는 변수의 값을 제어하는 식(증가/감소). 보통  ++  -- 를 쓰지만  i+=3 과 같이 식을 쓰는 경우도 있다.
                 초기화 식과 마찬가지로 식이 여러 개일 경우 콤마( , )로 구분한다. 조건식이 생략된 경우 무한루프가 된다.
                 초기화, 조건식, 증감식은 모두 필요하지 않으면 생략할 수 있다. 3가지 전부 생략하면 무한루프가 된다.

 for 문은 조건식이 참인동안 블록 { } 안을 반복해서 수행된다. 조건문이 거짓인 경우  for 문을 빠져나온다

 for 문도  if 문처럼 중첩이 가능하다.

 

 

for문 예시

위의 반복문은  i  1 로 초기화되고  1 씩 증가해서  5 보다 작거나 같을 때까지  for 문 블럭 { } 안에 있는  print 문을 실행할 것이다.

 

 

결과값

 i  6 이 되면  for 문의 조건식이  false 가 되기 때문에  print 문을 실행하지 않고  for 문을 빠져나간다.

 

 

  ■ 중첩 for문

   for 문안에 또 다른  for 문이 있는 것을 말한다. 2개가 중첩되어 있을 경우 이중 for 문, 3개가 중첩될 때는 삼중 for 문이라고 하는 데 3개 이상은 복잡해서 잘 쓰이지 않는다. 보통 행렬을 표현할 때 많이 사용한다.

 

 

이중 for문을 이용해서 5x5행렬 출력하기

위의 반복문은  i 가 행이 되고  j 가 열이 되어  5x5 행렬의 행과 열을 출력한다.

 

 

결과값

 

 

  ■ 향상된 for문

for(타입 변수명 : 배열 or 컬렉션){
	//반복할 문장
}

  타입은  배열 이나  컬렉션 요소의 타입과 같아야 한다.  배열 이나  컬렉션 에 저장된 값을 매 반복마다 하나씩 순서대로 읽어와서 변수에 저장한다. 반복문  { } 내에서는 이 변수를 이용해서 코드를 작성한다. 향상된  for 문은 일반  for 문과 달리  배열 이나 컬렉션  컬렉션 저장된 값을 읽어오는 용도로만 사용할 수 있다.

 

 

향상된 for문 예시

 배열  arr 의 내용을 하나씩 읽어와서  tmp 에 저장한다.

 print 문을 이용해서 하나씩 출력했다.

 

 

결과값

 

 

while문

while(조건식){
	// 조건식의 연산결과가 참(true)인 동안 반복될 문장
}

 while  if 문과 달리 조건식이  참 인동안 블럭 { } 내의 문장들을 반복하다 조건식이  거짓 이 되면  while 문을 빠져나간다.  while 문은 초기화 식이나 증감 식이 없기 때문에 반복문을 제어할 문장이 필요하다면  while 문 외부나  while{ } 안에 추가로 넣어주어야 한다. 조건식을  true 로 하면 무한루프가 된다.

 

 

이전의 for문 예시
while문으로 바꾼 예시

아까   for 문에서 나온 예시를  while 문으로 바꿨다. 초기화 식을  while{ } 안에 넣으면 매번 초기화되어서 반복문을 빠져나오지 못하게 되므로 외부에 선언했고, 반복문을 제어할 증감식이 필요해서  while{ } 내부에  i++ 를 넣었다.

위의 예시는  i  1 씩 증가되며 print문으로 출력되다가  i  6 이되면  while 문을 빠져나오게 된다.

 

 

while문 결과값

결과값이 동일한 것을 확인할 수 있다.

이처럼  if 문과  while 문은 서로 변환이 가능하다.

 

 

  ■ do-while문

do{
	//조건식의 연산결과가 참일 때 수행될 문장
}while(조건식);

 do-while  while 이 변형된 형태이다.  while 은 조건식을 따지고 나서 반복할지 말지 결정하는 반면에  do-while 은 먼저  do{ } 안의 내용들을 실행한 다음에 조건식을 따진다. 그래서  while 문은 조건식에 따라서 한 번도 수행되지 않을 수 있지만  do-while 문은 무조건 최소 1번은 수행된다.

 

 

while과&nbsp;do-while의 차이 예시

위의 코드는 어떻게 될까? 또한  i 값은 몇이 될까?

 

 

실행결과

 while 은 조건식의 결과가  false 이기 때문에  while{ } 의 내용을 한 번도 실행하지 않고 빠져나왔다.

반면에  do-while 은 조건식이  false 지만  do{ } 내용을 최소 1번은 수행하기 때문에  do{ } 의 내용대로  print 문이 실행되고  i 에서  1 이 감소되어  do-while 이 끝나고  i 를 출력했을 때  0 이 출력된다.

 

 

break문

  반복문도  break 문을 사용해서 반복문 바깥으로 벗어날 수 있다.  break 문은 자신이 포함된 가장 가까운 반복문을 벗어난다. 특정 조건을 만족하면 반복문을 벗어나는 식으로 많이 사용된다.

 

 

continue문

   continue 문은 반복문 내에서만 사용될 수 있다. 반복이 진행되는 도중에  continue 문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.  for 의 경우 증감식으로 이동하며,  while 문과  do-while 문의 경우 조건식으로 이동한다. 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고 싶을 때 많이 사용한다.

 

 

  + 이름 붙은 반복문

   break 문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에 하나이상의 반복문을 벗어날 때 사용한다. 반복문 앞에  이름 : 을 붙여주고  break 이름; 이나  continue 이름; 처럼 사용하면 된다.

 

 

 

'Back end > Java' 카테고리의 다른 글

[Java] 변수(Variable)와 메서드(Method)  (0) 2019.06.17
[Java] 객체지향 언어, 클래스(Class)와 객체(instance)  (0) 2019.06.11
[Java] 배열(Array)  (0) 2019.06.04
[Java] 연산자(Operator)  (0) 2019.05.21
[Java] 변수(Variable)  (0) 2019.05.20

 

 

공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 

 

 

  •  연산자(Operator)  : 연산을 수행하는 기호 ( + ,  - ,  * ,  / ,  % 등)
  •  피연산자(Operand)  : 연산자의 작업 대상( 변수 ,  상수 ,  리터럴 ,  수식 )

 

우선순위 종류 연산자 결합방향
1 최우선연산자  ( )   [ ]    .   -> 좌 → 우
2 단항연산자  ++ ,  -- ,  + ,  - ,  ~  !(type)  좌 ← 우
3 산술연산자  *  / 좌 → 우

 + ,  - 
4 쉬프트(비트이동)연산자  << ,  >>  좌 → 우
5 관계연산자  < ,  <= ,  >  >= ,  == ,  !=  좌 → 우
6 비트논리연산자  &  |  ^  좌 → 우
7 논리연산자  && ,  ||  좌 → 우
8 삼항연산자  ? :   좌 ← 우
9 대입연산자

 = ,  += ,  -= ,  *= ,  /= ,  %= ,  <<=,  >== ,  &= ,  ^= ,  |= 

 

좌 ← 우

연산자 순위가 높은 순서대로 먼저 계산된다!

 

  • 피연산자의 개수에 의한 분류
    : 개수가 1개이면 단항 연산자, 2개이면 이항 연산자, 3개면 삼항 연산자라고 한다.
  • 산술 변환
    : 이항 연산자는 두 피연산자의 타입이 일치해야 계산이 가능하므로 연산 전에 형 변환해서 타입을 맞춰주어야 한다.
    (작은 타입에서 큰 타입으로 형변환 하는 경우에는 자동형변환되어 생략 가능)

    + 연산 결과의 타입은 피연산자의 타입과 일치한다
    ex)  5 / 2   2    : 5나 2를  double 이나  float 으로 형변환 해주어야  2.5 가 나온다!

 

 

 

연산자의 종류

  ■ 단항 연산자 

  1. 증감 연산자 (++, --)  

      : 값을  증가 시키거나  감소 시킨다. (상수는 불가능)

       먼저 값을  증가 / 감소 시키는 전위형(prefix)과 나중에 값을  증가 / 감소 시키는 후위형(postfix)이 있다.

       이해하기 어렵다면 해당 코드가 있는 줄을 기준으로 생각하면 쉽다.  전위형 은 미리 계산하고 나서 값을 넣는 것이고,  후위형 은 줄이 끝난 뒤에 계산이 된다고 생각하면 된다.

 

int i = 5, j = 5;
System.out.println(i++);	// 5가 출력되고 나서 1이 증가된 6이 i에 저장됨
System.out.println(++j);	// 먼저 1이 증가된 6이 출력됨, i에 저장된 값도 6
System.out.println("i = " + i + ", j = " + j);

 

결과값

  2. 부호 연산자(+, -)

      :  - 는 부호를 반대로 변경한 결과를 반환한다(음수양수 / 양수 음수)

      부호 연산자는  boolean   char 를 제외한 기본형에만 사용할 수 있다.

 

 

  ■ 산술 연산자 (+, -, *, /, %)

  : 사칙연산은 우리가 알고 있는 것과 같다. 주의할 점은  / 0으로 나눌 수 없다는 것이다.  % 는 나머지 연산자로 몫으로 나눈 나머지를 반환한다. 나누는 수로 음수도 허용하지만 부호는 무시된다.  % 역시 0으로 나눌 수 없다. 

  ex)  5 % 2   1 

 

 

  ■ 비트 연산자(&, |, ^, ~, >>, <<)

    1. 비트 논리 연산자 (|, &, ^)  

       : 비트단위로 연산한 값을 반환하고 실수는 허용하지 않는다.(정수와 문자만 허용)

        | 는 OR연산,  & 는 AND연산,  ^ 는 XOR연산(서로 다를 때만 참)을 수행한다.

X Y X | Y X & Y X ^ Y
1 1 1 1 0
1 0 1 0 1
0 1 1 0 1
0 0 0 0 0

 

    2. 비트 전환 연산자(~)

       : 피연산자를 2진수로 표현했을 때 0은 1로, 1은 0으로 바꾼다. 

X ~X
1 0
0 1

 

    3. 쉬프트 연산자(<<, >>)

  •  <<  : 부호에 상관없이 2진수를 표현한 값들을 왼쪽으로 2자리 이동시킨다.
           자리에서 벗어난 값들은 버려지고 빈자리는  0 으로 채운다.

     ex)   8 << 2
           00001000   00100000  →  32 

  •  >>  : 부호를 유지한 채 양수인 경우  0 , 음수인 경우에는 빈자리를  1 로 채운다.

     ex)  -8 >> 2
           11111000   11111110  →  -2

           8 >> 2
           00001000   00000010  →  2 

 

 

  ■ 관계 연산자 ( <, >, <=, >=, ==, !=)

  : 두 피연산자를 비교한다. 반환 값은  true  false 뿐이다.

    == 는 같은지 비교하는 연산자이고  != 는 다른지 비교하는 연산자이다.

   참조형에는 사용할 수 없다.

 

 

  ■ 논리 연산자 (&&, ||, !)

  :  && 는 AND연산,  || 는 OR연산,  ! 는 NOT연산을 수행한다. 논리 연산자는 피연산자로  boolean형  또는  boolean형 값을 반환하는 조건식 만을 허용한다. AND와 OR가 동시에 있을 경우 AND를 먼저 수행한다.

X Y X && Y X || Y
true true true true
true false false true
false true false true
false false false false

NOT 연산 :  !true  →  false  /  !false  →  true 

 

 

  ■ 삼항 연산자 ( ? : )

  조건식  ?  (true일 때 실행될 내용)  :  (false일 때 실행될 내용)

  조건식이  true 일 경우에는 파란색 부분이 실행되고,  false 일 경우는 빨간색 부분이 실행된다.

 

 

  ■ 대입 연산자(==, +=, -=, *=, /=, %=, <<=, >==, &=, ^=, |= )

  대입 연산자를 기준으로 오른쪽의 값을 왼쪽에 저장한다.

  ex)   x = 5    x  5 를 대입

 

   == 를 제외한 나머지들은 복합 대입 연산자로  = 앞의 연산자로 양쪽의 값을 계산한 뒤에 그 값을 다시 왼쪽에 저장한다.

  ex)  x += 3    x  = x + 3

 

 

 

'Back end > Java' 카테고리의 다른 글

[Java] 변수(Variable)와 메서드(Method)  (0) 2019.06.17
[Java] 객체지향 언어, 클래스(Class)와 객체(instance)  (0) 2019.06.11
[Java] 배열(Array)  (0) 2019.06.04
[Java] 조건문과 반복문  (0) 2019.05.23
[Java] 변수(Variable)  (0) 2019.05.20

 

 

공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 

변수(Variable) : 값을 저장하기 위한 공간
상수(Constant) : 값을 한 번만 저장할 수 있는 공간(수정 불가능)
리터럴(Literal) : 값 자체를 의미. 상수 풀(constant pool)에 있음

 

변수

  값을 저장할 수 있는 메모리 공간. 변수를 선언하면 메모리에 변수 타입에 맞는 메모리가 할당되고, 변수의 이름을 통해서 제어할 수 있다.

 

 

  ■ 변수의 선언

  변수타입 이름 =

  변수의 초기화란 변수를 사용하기 전에 값을 미리 저장해 놓는 것을 말한다. 초기화하지 않은 상태로 값을 불러오면 쓰레기 값을 불러오기 때문에 사용하기 전에 미리 초기화해놓아야 한다.


[참고] 변수의 명명 규칙

1. 대소문자 구별, 길이에 제한 X
2. 예약어를 사용해서는 안된다.

3. 숫자로 시작해서는 안된다.
4. 특수문자는  _  $  만 사용 가능

 

 

  ■ 변수의 타입

  • 기본형 : 실제값을 저장
    정수형 :  byte ,  short ,  int ,  long 
    실수형 :
     float ,  double

    문자형:
     char 
    논리형 :
     boolean 
  • 참조형 : 값이 저장되어 있는 주소를 저장
    ex) 기본형을 제외한 나머지 타입

 

  ■ 기본형의 종류와 크기

 

  • 논리형(boolean)  :  true ,  false  두 가지 값만 존재 (대소문자를 구분하기 때문에  True 와 다름)
  • 문자형(char)
    : 하나의 문자를 저장할 수 있다. 실제로는 문자의 유니코드(정수)가 저장된다.
    문자를 코드로 변환하는 것을 문자 인코딩, 그 반대의 과정을 디코딩이라고 한다.

    유니코드는 전부 양수(0 포함)이므로  0 ~ 65535 의 범위를 가진다. 

기본형의 종류와 크기

 

 

  ■ 특수문자

tab  \t 
backspace  \b 
form feed  \f 
new line  \n 
carriage return  \r 
역슬래시(\)  \\ 
'  \' 
"  \" 
유니코드(16진수)문자  \u유니코드  
ex)  \u0041 
  • 정수형(byte, short, int, long)
    : 크기마다 표현할 수 있는 값의 범위가 다르다. (하나의 비트를 부호 비트로 쓰고 나머지로는 값을 표현하는데 쓴다.)
  • 실수형(float, double) : 정수와 달리 부호와 지수, 가수 부분으로 나뉘어 저장된다.
     float 은 7자리,  double 은 15자리를 오차 없이 저장할 수 있다.(정밀도)

 

  ■ 변수가 저장할 수 있는 값의 범위

  • 정수형 :  -2^(비트수-1)  ~  2^(비트수-1) -1 이다.
  • char형 :  \u0000  ~  \uffff 

 

 

 

상수

  : 변수와 비슷하지만 값을 수정할 수 없다.

    변수 선언과 동일하게 하되, 앞에  final 을 붙이면 된다. 관례상 대문자로 선언한다.

     ex)  final int MAX_VALUE = 10; 

 

■ 리터럴과 접두사, 접미사

  1. 정수형, 실수형
    접두어를 통해서 진수를 표현할 수 있다. 16진수는 0x 또는 0X, 8진수는  0을 붙인다.
  2. 정수형일 경우 접미사가 없으면  int ,  long 의 경우에는  l 이나  L 을 붙인다.
    실수형일 경우 접미사가 없으면  double (d를 붙임),  float  f 를 붙인다.
  3. 문자형
  4. 문자 리터럴은 글자 하나를 의미하고   ' 로 묶는다.
    문자열 리터럴은 두문자 이상이고  " 로 묶는다

 

 

 

형변환(Casting)

  : 변수 or 상수의 타입을 다른 타입으로 변환하는 것

  (바꿀 타입) 피연산자로 하면 된다. ex)  (int)c 

  큰 타입에서 작은 타입으로 변환하는 경우 값의 손실이 발생할 수 있다.

 

  1.  자동 형 변환 

    : 컴파일러가 자동적으로 해주는 형 변환.

    서로 다른 두 타입 간의 연산에서는 표현 범위가 더 넓은 타입으로 자동 형 변환된다. (기존 값을 최대한 보존하는 방법으로 함)

  •  short   char 는 둘 다 2 byte지만 범위가 서로 달라서 어느 쪽이든 값 손실이 발생해서 서로 자동 형 변환되지 않는다.
  •  boolean 을 제외한 기본형들을 서로 형 변환이 가능하다.
  • 기본형과 참조형은 서로 형 변환이 X
  • 서로 다른 타입의 변수 간의 연산은 형 변환을 해야 하지만 값의 범위가 작은 타입에서 큰 타입으로의 형 변환은 생략가능

 

  2.  명시적 형변환 

    : 변수가 저장할 수 있는 값의 범위보다 큰 값을 저장하려는 경우에는 값 손실이 발생할 수 있어서 에러가 나는데 형 변환을 명시적으로 표시해주면 실수가 아닌 의도적인 것으로 판단하여 에러를 발생시키지 않는다.

 

 

 

출력 형식

   System.out.print  : 출력 포맷을 정할 수 있다.

  ex)  System.out.printf("%d년 %d월 %d일", 2019, 5, 20);  : 2019년 5월 20일 

 

*  printf() 의 지시자

 %b   boolean 형식으로 출력
 %d  10진(decimal) 정수 형식으로 출력
 %o  8진(octal) 정수의 형식으로 출력
 %x ,  %X   16진(hexa - decimal)형식으로 출력
 %f  부동소수점(floating-point)형식으로 출력
 %e  %E  지수(exponent) 표현식으로 출력
 %c  문자(character)로 출력
 %s  문자열(string)으로 출력
  • java에서는  char 타입을  %d 로 출력하려면  int 로 형 변환을 해야 출력할 수 있다.
  • 출력될 값이 차지할 공간을 숫자로 지정할 수 있다.
     5d  : 오른쪽 정렬
     -5d  : 왼쪽 정렬

 

 

 

 

 

공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 

web2 Javascript 1
web2 Javascript 2
web2 Javascript 3
web2 Javascript 4
web2 Javascript 5
web2 Javascript 6
web2 Javascript 7
web2 Javascript 8
web2 Javascript 9
web2 Javascript 10
web2 Javascript 11

+ Recent posts