25.02.17 (월) 6일차 Java

허배령·2025년 2월 17일

괴발개발 TIL

목록 보기
6/54

제어문

반복문

while문

  • 조건식이 true일 때 문장 수행
    문장 수행이 끝나면 조건식 다시 확인 후
    true면 수행, 조건식이 false가 될 때까지 수행
    조건식이 false가 되면 반복문 종료

  • 별도의 초기식, 증감식이 존재하지 않고
    반복 종료 조건을 자유롭게 설정하는 반복문

** 확실히 얼마만큼 반복 후에 끝날지는 모르지만
언젠가 반복 조건이 false가 되는 경우 반복을 종료함

** { } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요

while(조건식) {
수행될 코드;
[증감식 or 분기문];
}

int i = 1;
i++;
}

do ~ while문

조건식이 true일 때 문장 수행
문장 수행이 끝나면 조건식 다시 확인 후
true면 수행, 조건식이 false가 될 때까지 수행
조건식이 false가 되면 반복문 종료

** { } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요

 do {
	반복 수행될 코드;
	-> 무조건 한번은 수행됨
    
} while(조건식);

int i = 1;
System.out.println(i + "출력");
i++;
} while(i <= 10);

분기문

break문

반복문에서는 break문 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문

for(int i = 1;; i++) {
System.out.println(i + " 출력");
if(i >= 10) {
break; // break문을 감싸고 있는{} 가장 가까운 반복문을 빠져나감 (for()여기)
}
}
for(초기값1; 조건식1; 증감식1) {
수행될 코드1;
for(초기값2; 조건식2; 증감식2) {
수행될 코드2; // 반복문2 바로 종료 -> 코드3으로
break;
}
수행될 코드3;
[break;] // []는 생략가능, 코드3 break를 감싸고 있는건 {} 반복문1
}

=> 두 번째 for문에 break를 만날 경우 반복문을 나가 수행될 코드3을 수행 후
다시 첫 번째 for문을 실행하지만
마지막 break가 있다면 수행될 코드3을 수행 후 for문을 완전히 빠져나감

continue문

반복문 내에서만 사용 가능하며
반복문 실행 시 continue 아래 부분은 실행하지 않고 반복문 다시 실행
for문의 경우 증감식으로 이동, while(do~while)문의 경우 조건식으로 이동
전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용

for(int i = 1; i <= 10; i++) {
if(i % 2 == 0) {
continue;
}
System.out.println(i + " 출력");
}
equals() 매서드
  • Java에서 문자열(String) 비교는 == 연산자 사용 불가
  • 비교연산자(==)는 보통 기본자료형끼리의 연산에서만 사용
  • 문자열1.equals(문자열2) => 문자열1과 2가 같으면 true / 다르면 false

배열

  • 변수의 나열 -> 배열
  • 같은 자료형의 변수를 하나의 묶음으로 다루는 것
    배열은 저장된 값마다 인덱스 번호가 0부터 시작하여 설정

배열의 특징

  • 한 가지 자료형만 저장 가능하다.
  • 여러 값을 저장할 수 있다.
  • 한 번 크기를 지정하면 변경 불가능하다.

배열 선언

  • 메모리에 배열을 참조하는 변수 공간을 만듦
    자료형 [] 배열명; int[] arr;
    자료형 배열명[]; int arr[];

배열 할당

  • 실제 값을 저장할 수 있는 배열을 메모리에 생성
    자료형[] 배열명 = new 자료형[배열크기];
    자료형 배열명[] = new 자료형[배열크기];
ex) 
int[] arr = new int[3];
int arr[] = new int[3];

배열 저장구조

배열은 참조 변수로 Heap영역에 할당되며 배열 공간의 주소를 저장
배열 공간의 주소를 이용해 인덱스를 참조하는 방식으로 값 처리

배열 초기화

  1. 인덱스를 이용한 초기화
ex) arr[0] = 1;
    arr[1] = 2;
  1. for문을 이용한 초기화
ex) for(int i = 0; i < arr.length; i++) {
	arr[i] = i;
  }
  1. 선언과 동시에 초기화
ex) int[] arr = {1, 2, 3, 4, 5};
    int[] arr = new int[] {1, 2, 3, 4, 5};
    String fruit[] = {"사과", "포도", "참외"};

변수 vs 배열

  1. 변수 선언
    int num;
    => stack 영역에 int 자료형을 저장할 수 있는 공간 4byte를 할당하고
    그 공간에 num이라는 이름을 부여

  2. 변수 대입
    num = 10;
    => 생성된 num이라는 변수공간에 10이라는 정수값 대입

  3. 변수 사용
    System.out.println("num에 저장된 값 : " + num);
    => num이 작성된 자리에 num에 저장된 값을 읽어와서 출력

============================

  1. 배열 선언
    int[] arr; = int arr[];
    => stack 영역에 int[] 자료형 공간을 4byte 할당하고
    그 공간에 arr이라는 이름을 부여
    해당 변수는 참조형으로 주소값만을 저장할 수 있다

  2. 배열 할당
    arr = new int[3]
    new : "new 연산자" 라고 하며 Heap 메모리 영역에 새로운 공간(배열, 객체)을 할당
    int[3] : int 자료형 변수 3개를 하나의 묶음으로 나타내는 배열
    new int[3] : Heap 영역에 int형 변수 3칸짜리 int[]을 생성(할당)
    arr = new int[3]
    int[] int[] -> 같은 자료형 == 연산가능

배열 선언 및 할당

int[] arr = new int[4];
    // ㄴ 참조 변수
		// arr[0~3] 전부 JVM에 의해 0으로 초기화 되어있는 상태
		
		arr[0] = 100;
		arr[1] = 200;
		arr[2] = 500;
		arr[3] = 1000;
		// arr[4] = 5000;
		// java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
		// 배열의 인덱스 범위를 벗어남 : 길이가 4칸까지 배열인데, 없는 인덱스번호인 4에 접근했다.
		
		// 코드에서 빨간줄 에러 : 컴파일 에러
		// 실행했을 때 발생하는 에러 : 런타임 에러
		
		// 배열과 for문
		// 배열의 길이 (몇 칸인가) : 배열명.length
		System.out.println("배열의 길이 : " + arr.length);
		
		for(int i = 0; i < arr.length; i++) {
			// i -> 0 1 2 3
			System.out.printf("arr[%d]에 저장된 값 : %d\n ", i, arr[i]);
			// arr[0]에 저장된 값 : 100
			// arr[1]에 저장된 값 : 200
			// ...
			
		}
        
 // 선언과 동시에 초기화
	   int[] arr2 = {1, 2, 3, 4, 5};
	   // stack 영역에 int[] 자료형 공간을 4byte 할당하고
	   // 그 공간에 arr2 라는 이름 부여
	   // Heap 메모리 영역에 int 5칸짜리 int[]을 생성하고
	   // 0번 인덱스부터 각 요소에 1~5까지 초기화 함 (대입)
	   // int[] 주소값을 arr2 참조변수가 참조함.
	   
	   System.out.println(Arrays.toString(arr2));
	}

**Heap 영역에 할당된 공간은 !절대! 비어있을 수 없다
=> 최초 할당 시 JVM 기본값이 자동 저장된다 (컴파일러)
boolean : false
나머지 : 0
참조형 : null

  1. 배열 요소 값 대입
arr[0] = 10;
arr[1] = 50;
arr[2] = 100;
System.out.println(arr[0]); // 10
System.out.println(arr[1]); // 50
System.out.println(arr[2]); // 150

실제로 arr 배열이 가진 모든 요소의 값을 알고 싶을 때

//Arrays.toString(배열명);
System.out.println(Arrays.toString(arr)); [10, 50, 100]
String 참조형
	String str1 = "가나다";  // String Constant Pool 저장 (문자열 상수풀에 저장) "리터럴 표기법"
	String str2 = new String("가나다"); // Heap 새 객체 저장 "뉴스트링 연산"
	String str3 = "가나다"; // str1이랑 같은 주소 참조
	String str4 = new String("가나다"); // str2처럼 같은 문자열을 가져도 다른 곳을 찾고
	System.out.println(str1); // 주소값? str(.toString()이 생략되어있음
	System.out.println(str2); 
	System.out.println(str1.toString());
	
	// String 클래스의 toString() 메서드가 존재 // 얘가 있어서 주소가 안 나오고 값으로 나옴
	// toString() 메서드는 자기 자신을 그대로 반환
	
	// System.out.println(str); 을 실행하면
	// str.toString()이 자동으로 호출됨
	// 대입해 둔 문자열 값 자체가 반환됨

    // 주소값(객체의 해시코드)을 확인하고 싶다면 아래처럼 사용 (쓸 일은 없음)
	System.out.println(System.identityHashCode(str1));
	System.out.println(System.identityHashCode(str2));
	System.out.println(System.identityHashCode(str3));
	System.out.println(System.identityHashCode(str4));
    
최고점과 최저점 기준 설정
		int max = score[0]; 
		int min = score[0];
			
			for(int i = 0; i < score.length; i++) {
			    // 0 1 2 3
				
				// 최고점 비교
				if(score[i] > max) {   // 점수가 max보다 크다면 그 점수가 max다
					max = score[i];
				}
				if(score[i] < min) {   // 점수가 min보다 적다면 그 점수가 min이다
					min = score[i];
				}
			}
profile
인생은 변수

0개의 댓글