728x90
반응형

<오늘의 학습>

1. 배열

2. 이차원 배열

3. 삼차원 배열

4. Random

 

 

1. 배열

자료형이 같은 자료 여러 개를 한 번에 관리할 수 있으며, 자료가 연속으로 나열된 자료 구조이다. 즉, 동일 자료형의 기억장소 집합체를 표현한다.

  1. int a=10; //변수(단독 주택에 비유)
    int b=20;
    int c=30;
  2. int arr[] = new int[3]; //배열(아파트에 비유)
    arr[0]=10;
    arr[1]=20;
    arr[2]=30;

 


1) 배열의 특징

  1. 배열의 장점 : 자료를 일괄 처리할 수 있다.
  2. 배열 순서는 0번부터 시작한다.
  3. 지역변수라도 자동 초기화가 된다.
  4. 배열은 new 연산자를 사용하여 생성한다. ex) int arr[]=new int[3];
  5. new연산자는 heap영역에 메모리를 할당받는다.
  6. cf(일반변수) : stack영역에 변수를 할당한다.
  7. 배열,클래스:new 연산자를 사용하여 heap 영역에 메모리를 할당받기 때문에 레퍼런스 자료형이라고 한다.
        ex) Test01 test01=new Test01[];
               └레퍼런스 변수(클래스 변수)&인스턴스&객체
  8. Garbage Collection(가비지 컬렌션) : 쓰레기 수집기
       - JVM에는 Garbage Collector가 존재한다.
       - 가비지 컬렉터는 더 이상 참조되지 않는 Garbage라고 불리는 불필요한 메모리를 알아서 정리해주는 역할을 한다.

 

  • stack영역 : 정적변수가 할당 됨(일반변수 선언,메서드가 포함됨)
  • heap영역 : 동적변수가 할당 됨(new 객체생성, new 배열생성)
  • 가비지 컬렉션 : JVM의 RunTime Data Area에서 사용하지 않은 heap메모리의 내용을 삭제하는 것.

 

 


2) 배열 선언 형식

  • 자료형[] 배열명;
  • 자료형 배열명[];
     배열명 = new 자료형[요소 갯수]; //위에서 선언 후 요소 갯수 넣기
    ex) int arr[];
           arr=new int[3];

  • 자료형[] 배열명 = new 자료형[요소갯수]; //선언과 동시에 생성
    ex) int arr[]=new int[3];

  • 자료형 배열명[]={초기값,초기값,,,}; //선언과 동시에 초기값을 준다
    ex) int a[]={10,20,30};

 

 


 예제) 배열 선언 및 값 초기화

		int a[]={10,20,30};
		for(int i=0;i<a.length;i++){
			System.out.printf("a[%d]:%d\n",i,a[i]);
		}
a[0]:10
a[1]:20
a[2]:30

 

 


 예제) 배열의 자동 초기화

	int max=1000;
	int hi=3;
	static int a;

	public static void main(String[] args) {
		//main()메서드가 static되어 있기 때문에 main()안에서는 static이 붙은 전역변수만 사용 가능함
		//main()안에서 객체 생성하면 static으로 선언하지 않아도 사용이 가능함

		int max=100;
		Practice p=new Practice();

		System.out.println(p.max);	//전역 변수 1000
		System.out.println(max);	//지역 변수 100
        
		System.out.println(a);	//0 출력. 전역 변수 a는 자동 초기화된다.
		int b; //지역 변수 b는 자동초기화가 되지 않는다.
		System.out.println(b); //오류. 지역 변수는 자동초기화가 되지 않는다.

		int c[]=new int[3];
		System.out.println(c[0]);	//0 출력. 배열은 자동으로 초기화된다.
		
	}//main_end
1000
100
0
0
  1. 전역변수:메서드 밖에서 선언된 변수로 자동으로 값이 초기화된다.
  2. 지역변수:자동으로 값이 초기화되지 않는다.
  3. 배열:지역변수일지라도 자동으로 초기화가 된다.
     

 


 예제) 배열끼리의 값 할당

		int a[]={10,20,30};
		int b[];//선언
		b=a;//a값을 b에 할당
		
		for(int i=0;i<a.length;i++){
			System.out.printf("a[%d]:%d, b[%d]:%d\n",i,a[i],i,b[i]);
		}
a[0]:10, b[0]:10
a[1]:20, b[1]:20
a[2]:30, b[2]:30

 

 

 

2. 이차원 배열

  • 행렬을 이용하여 평면을 구현하기 위한 배열
  • 이차원 이상으로 구현한 배열을 다차원 배열이라고 한다.
		int a[][]={{10,20},{30,40,50}};
		System.out.println("배열 a의 행 갯수:"+a.length);
		System.out.println("a[0] 열 갯수:"+a[0].length);
		System.out.println("a[1] 열 갯수:"+a[1].length);
배열 a의 행 갯수:2
a[0] 열 갯수:2
a[1] 열 갯수:3

 

 


 예제) 이차원 배열 출력

		int row,column;
		for(row=0;row<a.length;row++){
			for(column=0;column<a[row].length;column++){
				System.out.print(a[row][column]+" ");
			}//inner_for_end
			System.out.println();//줄바꿈
		}//for_end
10 20 
30 40 50

 

▷ 위 예제에서 행렬 표시

		for(row=0;row<a.length;row++){
			for(column=0;column<a[row].length;column++){
				System.out.printf("a[%d][%d]:%d\n",row,column,a[row][column]);
			}//inner_for_end
			System.out.println();//줄바꿈
		}//out_for_end
a[0][0]:10
a[0][1]:20

a[1][0]:30
a[1][1]:40
a[1][2]:50
a[0] 10 20  
a[1] 30 40 50

 

 


 예제) 이차원 배열 내용 출력

		double ki[][]={{162.5,175.5},{163.7,188.8}};

		for(int i=0;i<ki.length;i++){
			for(int j=0;j<ki[i].length;j++){
				System.out.print(ki[i][j]+"\t");
			}//inner_for_end
			System.out.println();
		}//out_for_end
162.5	175.5	
163.7	188.8

 

 

 

3. 삼차원 배열

 예제) 삼차원 배열 출력

		/*삼차원 배열 출력
		abc
		def

		ghi 
		jkl
		 */
		
		char c[][][]={
				{{'a','b','c'},{'d','e','f'}},
				{{'g','h','i'},{'j','k','l'}}
		};
        
		//출력
		for(int i=0;i<c.length;i++){
			for(int j=0;j<c[i].length;j++){
				for(int k=0;k<c[i][j].length;k++){
					System.out.print(c[i][j][k]);;

				}
				System.out.println();
			}
			System.out.println();
		}
abc
def

ghi
jkl

 

위 예제에서 선언할 때 값을 넣지 않고 'a'부터 'l'까지 초기 값을 넣어서 출력

		char arr[][][]=new char[2][2][3];
        
		//abc/def/ghi/jkl 초기값 넣기
		char ch='a';
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[i].length;j++){
				for(int k=0;k<arr[i][j].length;k++){
					arr[i][j][k]=ch;
					ch++;
				}
			}
		}
        
		//출력
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[i].length;j++){
				for(int k=0;k<arr[i][j].length;k++){
					System.out.print(arr[i][j][k]);;

				}
				System.out.println();
			}
			System.out.println();
		}
abc
def

ghi
jkl

 

 

 

4. Random

  • Math 참고 사이트 : https://docs.oracle.com/javase/1.5.0/docs/api/
  • 0 < Math.random() < 1
  • Math.random()*갯수+나올 수 있는 가장 작은 수
  • Math.random()*(큰 수-작은 수+1) +1 : 1부터 값이 시작될 때 큰 수와 작은 수 값을 이용할 수도 있다.
  • Math.random() 은 double형으로 출력되기 때문에 정수형으로 받고 싶다면 정수형으로 강제 형변환을 해주어야 한다.

 

 


 예제) 주사위 값을 랜덤으로 5번 출력

		/*
		int a=(int)(Math.random()*가지수+나올 수 있는 가장 작은 수);

		주사위가 나올 수 있는 총 숫자:6개
		int a=(int)(Math.random()*6+1); // 1~6까지의 랜덤 숫자가 a에 저장된다.
		 */

		//주사위 5번 돌리기
		for(int i=0;i<5;i++){
			int random_num=(int)(Math.random()*6+1);
			System.out.println(random_num);
		}
5
1
5
3
1

 

 


 예제) 로또 번호를 랜덤으로 출력

		/*랜덤 로또 번호(1~45) 출력*/
		int lotto[]=new int[6];//선언&생성

		for(int i=0;i<lotto.length;i++){
			lotto[i]=(int)(Math.random()*45+1);
			for(int j=0;j<i;j++){
				if(lotto[i]==lotto[j]){//이미 나온 값이 들어가면 무효화. 다시 랜덤 출력
					i--;
					break;//inner_for_out
				}//if_end
			}//inner_for_end
		}//out_for_end

		//출력
		System.out.print("로또 번호:");
		for(int i=0;i<lotto.length;i++)
			System.out.print(lotto[i]+" ");
로또 번호:38 5 13 23 6 20

 

 

 

 

 


2023년 5월 18일 목요일

<5일차 수업 후기>

예전에 C언어를 배울 때, rand() 함수를 이용해서 랜덤 값을 받아왔던 적이 있었다. C언어에서는 srand 함수와 time 함수를 이용하지 않으면 랜덤 값이 매번 똑같이 출력됐는데 JAVA에서는 다른 함수를 추가로 사용하지 않아도 값이 계속 바뀌어서 신기했다.

이번주 주말에는 로또 번호를 입력하고, 로또 번호를 뽑아서 당첨됐는지 출력하는 코드를 만들어보고 싶다.

728x90
반응형

'HRD_훈련 > JAVA' 카테고리의 다른 글

[JAVA] 생성자와 상속 (7일차)  (0) 2023.05.22
[JAVA] 객체 지향 프로그래밍 (6일차)  (0) 2023.05.19
[JAVA] 반복문 (4일차)  (0) 2023.05.18
[JAVA] 조건문 (4일차)  (0) 2023.05.17
[JAVA] 연산자(Operation) (3일차)  (0) 2023.05.17
728x90
반응형

<오늘의 학습>

1. 조건문 if

2. 조건문 switch-case

3. 반복문 for

4. 반복문 while

5. continue

6. break

 

 

3. 반복문 for

1) for문

▶ 반복되는 일을 처리하기 위해 반복문을 사용한다.

		for(초기값;조건문;증감식){
		       ①  ②⑤   ④
			조건문이 참일 때 실행
			조건문이 거짓일 때까지 반복 처리
			③⑥
		}

 

 


 예제) 반복문을 이용하여 1부터 10까지/10부터 1까지 출력

		/*1부터 10까지 출력*/
		int i;
		for(i=1;i<11;i++){
			System.out.print(i+" ");
		}
		System.out.println();
		
		/*10부터 1까지 출력*/
		for(i=10;i>0;i--){
			System.out.print(i+" ");
		}
1 2 3 4 5 6 7 8 9 10 
10 9 8 7 6 5 4 3 2 1

 

 


 예제) 반복문을 이용하여 아스키코드 'A'의 값을 이용하여 A~Z까지 출력

		char c;
		for(c='A';c<='Z';c++)
			System.out.printf("%c",c);
		System.out.println();
		
		//아스키코드표: 'A'는 65
		for(c=65;c<=90;c++)
			System.out.printf("%c",c);
		System.out.println();
		
		/*a~z까지 출력*/
		for(c=97;c<=122;c++)
			System.out.printf("%c",c);
		System.out.println();
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz

 

 


 예제) 반복문과 조건문을 이용하여 1부터 50까지의 숫자 중 6의 배수만 출력

		System.out.print("1부터 50까지의 숫자 중 6의 배수인 수 : ");
		for(int i=1;i<=50;i++){
			if(i%6==0){
				System.out.print(i+" ");
			}
		}
1부터 50까지의 숫자 중 6의 배수인 수 : 6 12 18 24 30 36 42 48

 

 


 예제) 반복문과 조건문을 이용하여 1부터 20까지의 짝수의 합을 출력

		int sum=0;
		for(int i=1 ; i<=20 ; i++){
			if(i%2==0){
				sum+=i;//sum=sum+i;
			}
		}
		System.out.print("1부터 20까지의 짝수의 합:"+sum);
1부터 20까지의 짝수의 합:110

 

※ 반복문 안에서 sum 값이 변화하는 모습을 확인해 보자

		/*1~20까지의 짝수의 합*/
		/*반복문에서 어떤 값이 sum 값에 더해지는지 확인*/
        
		int sum=0;
		for(int i=1 ; i<=20 ; i++){
			if(i%2==0){
				System.out.printf("%2d+%2d=",sum,i);//한자리부터 두자리수 숫자가 나오기때문에 깔끔하게 출력하기 위해 2칸 확보
				sum+=i;//sum=sum+i;
				System.out.printf("%3d\n",sum);
			}
		}
		System.out.print("1부터 20까지의 짝수의 합:"+sum);

 

 0+ 2=  2
 2+ 4=  6
 6+ 6= 12
12+ 8= 20
20+10= 30
30+12= 42
42+14= 56
56+16= 72
72+18= 90
90+20=110
1부터 20까지의 짝수의 합:110

 

 


2) 이중 for문

▶ 반복문 안에 또 다른 반복문을 중첩해서 사용할 수 있다.

 

 예제) 2단부터 9단까지의 구구단 출력

		int i,j;
		System.out.println("<구구단(2~9단)>");
		for(i=1;i<10;i++){
			for(j=2;j<10;j++){
				System.out.printf("%d*%d=%2d\t",j,i,j*i);
			}//inner_for
			System.out.println();
		}//out_for
<구구단(2~9단)>
2*1= 2	3*1= 3	4*1= 4	5*1= 5	6*1= 6	7*1= 7	8*1= 8	9*1= 9	
2*2= 4	3*2= 6	4*2= 8	5*2=10	6*2=12	7*2=14	8*2=16	9*2=18	
2*3= 6	3*3= 9	4*3=12	5*3=15	6*3=18	7*3=21	8*3=24	9*3=27	
2*4= 8	3*4=12	4*4=16	5*4=20	6*4=24	7*4=28	8*4=32	9*4=36	
2*5=10	3*5=15	4*5=20	5*5=25	6*5=30	7*5=35	8*5=40	9*5=45	
2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	7*6=42	8*6=48	9*6=54	
2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	8*7=56	9*7=63	
2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	9*8=72	
2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81

 

 

 

4. 반복문 while

1) while문

▶ while문은 조건식이 참인 동안 수행문을 반복해서 수행한다.

		초기값
		while(조건식){
			조건식이 참이면 수행
			증감식
		}

 

▶ while문의 무한 반복

		while(true){
			//무한 반복
		}

 

 


 예제) while문을 이용하여 1부터 10까지 출력

		int i=1;
		
		System.out.println("<while(1~10)>");
		while(i<=10){
			System.out.print(i+" ");
			i++;
		}//while_end
		System.out.println("\n");
<while(1~10)>
1 2 3 4 5 6 7 8 9 10

 

 


2) do-while문

▶ while문은 조건을 먼저 검사해서 조건식에 맞지 않으면 한 번도 수행이 일어나지 않는다. 하지만 do-while문은 {} 안의 문장을 무조건 한 번 수행한 뒤에 조건식을 확인한다는 점에서 차이가 있다.

		초기값
		do{
			먼저 1번은 수행한 뒤, 조건식이 참이면 수행
			증감식
		}while(조건식);

 

 


 예제) do~while문을 이용하여 10부터 20까지 출력

		i=10;
		System.out.println("<do~while(10~20)>");
		do{
			System.out.print(i+" ");
			i++;
		}while(i<=20);//do_while_end
<do~while(10~20)>
10 11 12 13 14 15 16 17 18 19 20

 

 


 예제) while문과 do-while문을 비교

		/*while*/
		int a=10000;
		while(a<=10){
			System.out.println("Hello");
		}
		System.out.println();//줄바꿈
		
		/*do~while*/
		int b=10000;
		do{//한 번은 출력
			System.out.println("World");
		}while(b<=10);
	//while문의 Hello 는 출력되지 않음
World

※do-while문은 수행을 한 번 한 뒤에 조건식을 확인하기 때문에 World만 출력된다.

 

 

 

5. continue

  • continue문은 반복문과 함께 쓰인다.
  • continue문을 만나면 이후의 문장은 수행하지 않고 for문의 처음으로 돌아가 증감식을 수행한다.
  • 반복문을 수행할 때, 특정 조건에서는 수행하지 않고 건너뛰어야 할 때 사용한다.
		int num, sum=0;
		
		for(num=1;num<=100;num++){
			if(num%2==0)	//짝수일 때
				continue;	//num 값을 sum에 저장하지 않고 num++을 수행
			sum += num;
		}
		System.out.println("1부터 100사이의 홀수의 합:"+sum);
1부터 100사이의 홀수의 합:2500

 

 

 

6. break

  • switch-case문에서 break문을 사용할 때, 조건을 만족하면 다른 조건을 더 이상 비교하지 않고 switch문을 빠져나온다.
  • 반복문에서 break문을 만나면 더 이상 반복하지 않고 해당 반복문을 빠져나온다.
		/*for문의 break*/
		
		for(int i=1;i<=50;i++){
			System.out.print(i+" ");
			if(i==10)
				break;//i값이 10이면 반복문 for 탈출
		}//for_end
		System.out.println();
		/*while문의 break*/

		int a=1;
		while(a<10000){
			System.out.print(a+" ");
			if(a==10)
				break;
			a++;
		}
1 2 3 4 5 6 7 8 9 10

 

 

 

 

 


2023년 5월 17일 수요일

<4일차 수업 후기>

반복할 변수 i 등을 선언할 때 전역 변수보다는 지역 변수로 많이 선언하는 것을 새롭게 알게 되었다. 데이터 낭비를 줄이기 위해서 더 이상 사용하지 않을 변수라서 지역 변수로 선언해 주는 것 같았다. 앞으로는 데이터가 낭비되지 않도록 신경 써서 코드를 작성해야겠다.

개인적으로 조건문과 반복문을 이용한 알고리즘 문제가 가장 재미있다고 생각한다. 재미있는 수업이었다.

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 조건문 if

2. 조건문 switch-case

3. 반복문 for

4. 반복문 while

5. continue

6. break

 

 

1. 조건문 if

▶ 조건문 : 주어진 조건에 따라 다른 문장을 선택할 수 있도록 프로그래밍 하는 것

 

1) if문

		if(조건){
			수행;		//조건이 참일 경우에 수행
		}
		if(조건1){
			수행1;		//조건2이 참일 경우에 수행
		}
		
		if(조건2){
			수행2;		//조건2가 참일 경우에 수행.
		}

 

 


 예제) if문 만을 이용한 학점 출력 예제

		int score = 90;
		if(score >= 90){
			System.out.println("A");	//출력
		}
		if(score >= 80){
			System.out.println("B");	//출력
		}
A
B
  • 90의 값은 첫 번째 if문과 두 번째 if문을 모두 만족하여 A와 B가 모두 출력된다.

 

 


2) if-else문

▶ 조건식을 만족하는 경우와 만족하지 않는 모든 경우를 나타낼 때 사용한다.

		if(조건){
			수행1;	//조건이 참일 경우에 수행
		}
		else{
			수행2;	//조건이 거짓일 경우에 수행
		}

 

▶ 조건 연산자를 if-else문으로 표현할 수 있다.

		int num;
		/*num = (5>3) ? 1 : 0; => if-else문으로 표현*/
		if (5>3){
			num=1;
		}
		else{
			num=0;
		}

 

 


3) if-else if-else문

▶ 하나의 상황에 조건이 여러 개인 경우에 사용한다.

		if(조건1){
			수행1;	//조건1이 참일 경우에 수행
		}
		else if(조건2){
			수행2;	//조건1이 거짓이고 조건2가 참일 경우에 수행. 조건1이 참이면 조건2가 참이여도 출력되지 않는다.
		}
		else{
			수행3;	//조건1과 조건2가 모두 거짓일 경우에 수행
		}

 

 


예제) if-else if 문을 이용한 학점 출력

		int score = 90;
		if(score >= 90){
			System.out.println("A");	//출력
		}
		else if(score >= 80){
			System.out.println("B");	//출력X
		}
A
  • 90의 값은 첫 번째 if문의 조건을 만족하여 A가 출력된다.

 

 


예제) 숫자를 입력받아 양수인지, 음수인지 구분하여 출력

		/*임의의 수를 입력받아서 양수인지 판정하여 출력하시오*/
		
		Scanner scan = new Scanner(System.in);	//키보드 입력
		int num=0;
		System.out.print("양수를 판정할 숫자를 입력하시오 >> ");
		num = scan.nextInt();	//숫자 입력
		
		if(num>0){
			System.out.println("입력받은 숫자는 양수입니다.");
		}
		else if(num==0){
			System.out.println("입력받은 숫자는 0입니다.");
		}
		else{
			System.out.println("입력받은 숫자는 음수입니다.");
		}
		
		scan.close();	//close를 해주지 않아도 오류가 나지는 않으나, OS 자원을 되돌리기 위해 close()
양수를 판정할 숫자를 입력하시오 >> -1
입력받은 숫자는 음수입니다.

 

 

 

2. 조건문 switch-case

▶ 조건이 많아질 때 코드가 길어지는 것을 방지하고 가독성을 좋게하기 위해 사용한다.

		switch(조건){
		case 0:	//조건이 일치하면 실행
			실행1;
			break;	//break가 없으면 다음 case도 실행
		case 1:
			실행2;
			break;
		default:
			실행3;	//조건이 일치하는 case가 없으면 실행
		}

 

 


 예제) 임의의 수를 입력받아 짝수인지 홀수인지 출력

package java_practice;

import java.util.Scanner; //scan

public class Practice {
	public static void main(String[] args) {
		/*임의의 수를 입력받아 짝수인지 홀수인지 출력하시오.*/
        
		Scanner scan = new Scanner(System.in);
		int num=0;

		System.out.print("임의의 수를 입력하시오 >> ");
		num=scan.nextInt();

		switch(num%2){
		case 0:		//짝수에 2를 나눈 나머지는 0이다
			System.out.printf("숫자 %d는 짝수입니다.\n", num);
			break;
		default:	//2로 나눈 나머지가 1이 나올 때의 홀수 값. 값을 나누면 0과 1,짝수와 홀수뿐이라 나머지 하나는 default 표기
			System.out.printf("숫자 %d는 홀수입니다.\n", num);
		}

		scan.close();
        
	}//main_end
}//class_end
임의의 수를 입력하시오 >> 5
숫자 5는 홀수입니다.

 

 


 예제) 열두달 중 하나의 달을 입력 받아 그 달의 마지막 날짜를 출력

package java_practice;

import java.util.Scanner; //scan

public class Practice {
	public static void main(String[] args) {
		/*월(달) 입력 받아서 그 달의 마지막 날짜를 구하시오*/

		Scanner scan = new Scanner(System.in);
		int month=0, days=0;

		System.out.print("날짜를 구할 달을 입력하세요(1~12) >> ");
		month = scan.nextInt();

		if(month>12 || month<1){	//12보다 큰 값을 입력하거나, 1보다 작은 값을 입력하면 재입력 요청
			System.out.println("잘못 입력하셨습니다.\n1~12 사이의 값을 다시 입력해주세요.");
		}
		else{	//1부터 12사이의 값이 입력되었을 때
			switch(month){
			case 2:
				days=28;
				break;
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				days=31;
				break;
			default:	//2,4,6,9,11월
				days=30;
			}//switch_end
			System.out.printf("%d월은 %d일까지입니다.\n", month, days);
		}//else_end

		scan.close();

	}//main_end
}//class_end
날짜를 구할 달을 입력하세요(1~12) >> 6
6월은 30일까지입니다.

 

 

 

 

다음 학습

 

[JAVA] 반복문 (4일차)

 

deliciouscode.tistory.com

 

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 대입 연산자

2. 부호 연산자

3. 산술 연산자

4. 증감 연산자

5. 관계 연산자

6. 논리 연산자

7. 복합 대입 연산자

8. 조건 연산자

9. Shift 연산자

10. 연산자 우선 순위

11. 문자열 비교 연산자

12. 객체 비교 연산자

 

 

항과 연산자(Operation)

단항 연산자 항이 한 개인 연산자 ++num
이항 연산자 항이 두 개인 연산자 num1 + num2;
삼항 연산자 항이 세 개인 연산자 ( 5> 3) ? 1 : 0;

 

 

 

1. 대입 연산자

▶ 변수에 값을 대입하는 연산자

int age = 27; //age 변수에 값 27을 대입

int sum = aScore + bScore; // aScore 값과 bScore 값을 더하여 sum 변수에 대입

 

 

 

2. 부호 연산자

▶ 더하기, 빼기 연산에 쓰는 이항 연산자. 부호(양수,음수)를 나타내는 단항 연산자로도 사용한다.

연산자 기능 연산
+ 변수나 상수의 값을 양수로 만든다. +2
- 변수나 상수의 값을 음수로 만든다. -2

 

 

 

3. 산술 연산자

▶ 사칙 연산에서 사용하는 연산자

연산자 기능 연산
+ 두 항을 더한다. 5+3 => 8
- 앞에 있는 값에서 뒤에 있는 값을 뺀다. 5-3 => 2
* 두 값을 곱한다. 5*3 => 15
/ 앞에 있는 값에서 뒤에 있는 값을 나누어 몫을 구한다. 5/3 => 1
% 앞에 있는 값에서 뒤에 있는 값을 나누어 나머지를 구한다. 5%3 =>2

▶ 실수/정수=실수(자료형이 큰 쪽으로 자동형변환)
   ex) 10.0/2=5.0

▶ 몫과 나머지를 이용한 게시판 page 계산

  • 37/10=3 => 3+1page //페이지 갯수 4
  • 37%10=7 => 마지막 페이지는 7개 출력
		int pageCount=(37/10)+(((37%10)==0)?0:1);
		System.out.println("페이지 수:"+pageCount);//페이지 수:4

 

 

 

4. 증감 연산자

▶ 단항 연산자로, 연산자 앞이나 뒤에 사용하며 값을 1만큼 늘리거나 1만큼 줄인다. 어디에 연산자가 위치하느냐에 따라 값이 바뀌니 주의한다.

연산자 기능 연산
++ 항의 값에 1을 더한다. ++num;//먼저 num값이 증가한 후 대입
num++;//num값을 대입한 후 num값 증가
-- 항의 값에 1을 뺀다. --num;//먼저 num값이 감소한 후 대입
num--;//num값을 대입한 후 num값 감소

 

증감연산자 계산

		int a=5;
		int b=5;

		int x = ++a + b--;	//6+5 값 대입

		System.out.println(x);	//11 출력

 

		int a=5;

		int b = ++a + ++a;

		System.out.println(b);	//13 출력
  • C언어에서는 14로 계산되고, 자바에서는 13으로 계산된다.

 

 

 

5. 관계 연산자

▶ 항이 두 개인 이항 연산자로, 두 개의 항을 비교한다. 관계 연산자의 결과 값은 참(true) 또는 거짓(false)으로 반환된다.

연산자 기능 (왼쪽을 기준으로 비교) 연산
> 왼쪽 항이 크면 참, 아니면 거짓을 반환한다.(초과) num > 5;
< 왼쪽 항이 작으면 참, 아니면 거짓을 반환한다. (미만) num < 5;
>= 왼쪽 항이 크거나 같으면 참, 아니면 거짓을 반환한다. (이상) num >= 5;
<= 왼쪽 항이 작거나 같으면 참, 아니면 거짓을 반환한다. (이하) num <= 5;
== 두 항의 값이 같으면 참, 아니면 거짓을 반환한다. num == 5;
!= 두 항의 값이 다르면 참, 아니면 거짓을 반환한다. num != 5;

 

 

 

6. 논리 연산자

참과 거짓의 논리 연산을 프로그래밍 언어로 구현한 연산자

1) 일반 논리 연산자

연산자 기능 연산
&& (논리 곱. AND) 두 항이 모두 참인 경우에만 결과 값이 참이다. 그렇지 않은 경우는 모두 거짓이다. boolean val = (5>3) && (5>2); => true
|| (논리 합. OR) 두 항 중 하나의 항만 참이어도 결과 값이 참이다. 두 항이 모두 거짓일 경우에만 결과 값은 거짓이다. boolean val = (5>3) || (5<2); => true
! (부정. NOT) 참인 경우는 거짓으로 바꾸고, 거짓인 경우에는 참으로 바꾼다. 단항 연산자이다. boolean val = !(5>3); =>false

 

 

2) bit(이진) 논리 연산자

연산자 기능 연산
& (AND) 두 개의 비트 값이 모두 1인 경우에만 연산의 결과 값이 1이 된다.       00000101
&    00000010
=>  00000000
| (OR) 두 개의 비트 중값이 하나라도 1인 경우에 연산의 결과 값이 1이 된다.      00000101
|    00000010
=> 00000111
^ (XOR) 같은 값이면 0, 다른 값이면 1의 값을 가진다.      00000101
^    00000010
=>  00000111
~ (NOT) 비트 값 0은 1으로, 1은 0으로 바꾼다. ~00000101 => 11111010

 

 

 

7. 복합 대입 연산자

▶ 대입 연산자와 다른 연산자를 조합해 하나의 연산자처럼 사용하는 연산자

연산자 기능 연산
+= 두 항의 값을 더해 왼쪽 항에 대입한다. sum+=i;
sum = sum + i;
-= 왼쪽 항에서 오른쪽 항을 뺀 값을 왼쪽 값에 대입한다. num -= 2;
num = num - 2;
*= 두 항의 값을 곱해 왼쪽 항에 대입한다. num *= 2;
/= 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입한다. num /= 2;
%= 왼쪽 항을 오른쪽 항으로 나눈 값의 나머지를 왼쪽 항에 대입한다. num %= 2;
<<= 비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입한다. num <<= 2;
>>= 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입한다.
왼쪽에 채워지는 비트 값은 부호 비트와 동일하다.
num >>= 2;
>>>= 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입한다.
왼쪽에 채워지는 비트 값은 0이다.
num >>>= 2;
&= 두 항의 & 비트 연산 후 값을 왼쪽 항에 대입한다. num &= 2;
|= 두 항의 | 비트 연산 후 값을 왼쪽 항에 대입한다. num |= 2;
^= 두 항의 ^ 비트 연산 후 값을 왼쪽 항에 대입한다. num ^= 2;

 

 

 

8. 조건 연산자

▶ 연산에 필요한 항의 개수가 세 개인 삼항 연산자로, 주어진 조건식이 참인 경우와 거짓인 경우에 따라 다른 결과 값이 나온다.

연산자 기능 연산
조건식 ? 결과1 : 결과 2; 조건식이 참이면 결과 1,
조건식이 거짓이면 결과2가 선택된다.
int num = (a>b) ? a : b;

 

 

 

9. Shift 연산자

연산자 공식 기능 연산
<< X*2ⁿ 왼쪽으로 비트를 이동한다. 오른쪽은 0으로 채운다.  00000101<<2 => 00010100
>> X*2ⁿ 오른쪽으로 비트를 이동한다. 왼쪽은 0으로 채운다. 00010100>>2 => 00000101
>>>  X/4ⁿ 비트를 오른쪽으로 이동한다. 왼쪽에 채워지는 비트 값이 부호 비트와 상관없이 무조건 0이 된다. 00000001>>>2 => 00000001


▶ 부호 비트(sign bit)

  1. 최좌측 bit
  2. 0이면 양수, 1이면 음수
    ex) 0000 0001 ->양수
          1000 0001 ->음수 (-1을 표기한 것은 아님)

 

 

 

10. 연산자 우선 순위

우선순위 연산자 연산 방향
1 단항 증감(++, --), 부호(+, -), 논리(!)
2 산술 산술 (*, /, %)
3 산술 산술 (+, -)
4 비트 이동 Shift (<<, >>)
5 관계 비교 (<, >, <=, >=, instanceof)
6 관계 비교 (==, !=)
7 비트 곱 논리 (&)
8 비트 차 논리 (^)
9 비트 합 논리 (|)
10 논리 곱 논리 (&&)
11 논리 합 논리 (||)
12 조건 조건 (? :)
13 대입 대입(=, +=, -=, *=, /=, %=)

 

 

 

11. 문자열 비교 연산자

  1. equals()메소드:문자열을 비교할 때 사용(대,소문자 구분)
    ex) yes != YES != Yes
  2. equalsIgnoreCase():문자열비교(대문자,소문자 구분없이 비교)
    ex) yes == YES == Yes
		/*문자열 비교*/
		String str1="hi", str2="hi", str3="HI";
		
		System.out.println(str1.equals(str2));//true
		System.out.println(str1.equals(str3));//false
		System.out.println(str1.equalsIgnoreCase(str3));//true

 

 

 

12. 객체 비교 연산자 (instanceof)

  1. 객체 instanceof 클래스
  2. 왼쪽 instanceof 오른쪽
		/*객체 instanceof 클래스*/
		String str = new String("aaa");
		Object ob=new Object();
		
		//왼쪽 객체보다 오른쪽 클래스가 같거나 위일 때 => true
		System.out.println(str instanceof String);//true
		System.out.println(ob instanceof Object);//true
		System.out.println(str instanceof Object);//true
		System.out.println(ob instanceof String);//false
  • Object는 자바의 최상위 클래스이다. 클래스를 만들 때 상속을 받지 않아도 내부적으로 Object가 상속받아진다.

 

 

 

 

 


2023년 5월 16일 화요일

<3일차 수업 후기>

증감 연산자 계산을 많이 공부했다고 생각했는데, [ ++a + ++a ]의 값을 14라고 생각했다. C언어에서는 14로 계산되고, 자바에서는 13으로 계산된다고 하니 차이를 알아두면 좋을 것 같다.

또한 클래스를 만들 때 상속을 받지 않아도 Object가 상속받아지는지 몰랐다. Object가 자바의 최상위 클래스라는 것을 꼭 기억하자.

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 변수와 상수

2. 자료형

3. 변수 선언

4. 식별자

5. 진법 

 

 

1. 변수와 상수

① 변수(Variable) : 데이터 값들이 저장되는 메모리 공간. 저장된 값의 변경이 가능하다.

② 상수(Constant) : 변하지 않는 데이터의 값이 저장되는 메모리 공간. 저장된 값의 변경이 불가능하다.

-final 예약어를 사용해 선언할 수 있다.

 

 

 

2. 자료형

▶ 자료형(Data type) : 자료의 타입을 나타낸다.

1) 기본 자료형(Elementary data type) : 실제 값이 저장된다. 범위를 넘어가는 값은 허용되지 않는다.

⑴ 정수형 : byte, short, int, long

  1. byte : 1byte는 8bit를 나타낸다. 바이트 단위의 정보를 저장하거나 통신할 때 주로 이용한다.
  2. short : 2byte 정수 자료형.
  3.  int : 4byte 정수 자료형. 컴퓨터에서 정수로 연산을 할 때 4바이트 단위로 처리하는 것이 가장 효율적이기 때문에 정수를 표현할 때 가장 많이 사용한다.
  4. long : 8byte 정수 자료형. 자바에서 정수를 표현하는 가장 큰 단위의 자료형이다. 자바는 모든 정수 값을 기본으로 int형으로 처리하기 때문에 long형을 나타내는 식별자인 L이나 l을 사용하려는 숫자 뒤에 붙여야 사용이 가능하다.

 

⑵ 실수형 : float, double

  1. float : 4byte 실수 자료형. 정밀도가 낮다.
  2. double : 8byte 실수 자료형. 정밀도가 높다.

 

⑶ 문자형 : char

  • char : 2byte 문자 자료형. 자바는 유니코드에 기반하여 문자를 표현하기 때문에, 자바의 문자 자료형인 char형은 2byte를 사용한다.

 

⑷ 논리형 : boolean

  • boolean : 어떤 변수의 참, 거짓의 값을 나타내는 데 사용한다. true(참), false(거짓) 두 가지 값만을 가진다.

 

▶ 자료형의 특징

데이터 타입 구분 메모리 크기 값의 범위
byte 정수형 1바이트 -128 ~ +127
short 정수형 2바이트 -32768 ~ +32767
int 정수형 4바이트 -2147483648~2147483647
long 정수형 8바이트 -9223372036854775808
~9223372036854775807
float 실수형 4바이트 1.4E-45~3.4028235E38
double 실수형 8바이트  
char 문자형 4바이트  
boolean 논리형 1바이트  

★ 자료형 크기 순서 : byte < short < int < long < float < double



2) 참조 자료형(Reference data type) : 실제 객체를 가리키는 주소를 저장함.

  • 클래스, 인터페이스, 배열

 

3) 문자열(String) : 클래스 자료형. 기본 자료형 X


4) 무치형(void) : 자료형이 없는 것

 

 

 

3. 변수 선언

package java_practice;

public class Practice {

	public static void main(String[] args) {
		/*변수 선언*/
		int sum;	//정수형 변수 sum 선언
		sum=0;		//sum 변수에 값 0을 대입하여 초기화
		char c = 'c';	//변수 선언 및 대입
		Long longSum = 100L;
		
		/*상수 선언*/
		final int MAX = 100;	//상수 MAX=100
		Max=200;//상수는 값을 변경할 수 없기 때문에 오류
        
	}//main_end
}//class_end
  • 변수나 함수를 표기할 때는 카멜 표기법을 사용하는 것이 권장된다.

 

▶ 변수 표기법

  1. 카멜 표기법(camelCase) : 식별자 표기시에 여러 단어가 이어지면 첫 단어의 시작만 소문자로 표시하고 각 단어의 첫 글자는 대문자로 지정하는 것이다.
  2. 파스칼 표기법(PascalCase) : 여러 단어가 이어지면, 각 단어의 첫 글자는 대문자로 지정한다.
  3. 스네이크 표기법(snake_case) : 여러 단어가 이어지면 단어 사이에 언더바를 넣어 표시한다.
  4. 헝가리안 표기법(iNum) : 식별자 표기시, 두어에 자료형을 붙이는 표기법이다.

 

 

 

4. 식별자

1) 식별자(identifier) : 명칭(이름) ex) int a = 100;

  1. 변수 이름: 첫글자는 소문자로 시작한다. (카멜 표기법 권장)
  2. 메소드 이름: 첫 글자는 소문자로 시작한다. (카멜 표기법 권장)
  3. 클래스 이름: 첫 글자는 대문자로 시작한다. (파스칼 표기법 권장)

 

2) 식별자 사용 규칙

  1.  영문자,숫자를 조합하여 사용한다. 첫 글자는 소문자로 쓰는 것을 권장하며 대소문자를 구분한다. 첫 글자는 영문자로 시작해야한다.(숫자X)
  2. 키워드(예약어)는 사용할 수 없다.
  3. 공백을 사용할 수 없다.
  4. 특수문자를 사용할 수 없다. 단, '_','$'는 예외로 사용이 가능하다.

 

 

 

5. 진수 표현

  1. 10진수 : 1 -> 2 -> 3 ~
  2. 2진수 : 0000 0000 -> 0000 0001 -> 0000 0010 ~
  3. 8진수 : 0~..10(십진수8)..~17(십진수15)
  4. 16진수 : 0~..A..~F

 

▶ 2진수, 8진수, 16진수 표현

10진수 1 2 3 4 5 6 7 8
2진수 0000 0001 0010 0011 0101 0110 0111 1000
8진수 1 2 3 4 5 6 7 10
16진수 1 2 3 4 5 6 7 8
10진수 9 10 11 12 13 14 15 16
2진수 1000 1001 1010 1011 1101 1110 1111 10000
8진수 11 12 13 14 15 16 17 20
16진수 9 A B C D E F 10

 

 


예제) 자바에서의 2진수, 8진수, 16진수 출력

		int a=122;
		
		System.out.println("10진수:"+a);
		System.out.println("2진수:"+Integer.toBinaryString(a));//2진수
		System.out.println("8진수:"+Integer.toOctalString(a));//8진수
		System.out.println("16진수:"+Integer.toHexString(a));//16진수
		System.out.println();
		
		System.out.printf("8진수(o):%o\n", a);
		System.out.printf("16진수(x):%x\n", a);
		System.out.println();
		
		
		int b = 014;//8진수
		System.out.println("8진수 014="+b);
		
		int c = 0xa;//16진수
		System.out.println("16진수 0xa="+c+"\n");

 

출력 결과

10진수:122
2진수:1111010
8진수:172
16진수:7a

8진수(o):172
16진수(x):7a

8진수 014=12
16진수 0xa=10

 

 

 

 

 


2023년 5월 15일 월요일

<2일차 수업 후기>

정보처리기사 기출 문제로 헝가리안 표기법이 나와서 표기법 4가지를 공부했는데,  클래스 이름은 파스칼 표기법을 권장하고 변수명은 카멜 표기법을 권장하는지는 몰랐다.

개인적으로 변수명을 작성할 때 스네이크 표기법을 이용하는 것을 좋아했는데, 앞으로는 클래스나 변수명을 작성할 때 권장표기법을 이용해서 더 깔끔하게 코드를 작성해야겠다.

728x90
반응형

+ Recent posts