본문 바로가기

공부일지

230925 (Java)

기본 타입과 참조 타입

  • 기본 타입은 스택 영역에 즉시 저장된다.
  • 참조 타입은 힙 영역에 저장되고 그 위치를 스택 영역에 저장한다.
  • 참조 타입의 값 비교는 epuals를 사용한다.
  • 참조 타입은 스택 영역에 주소 만을 가진다.
  • 참조 타입은 대문자로 작성한다.

메모리의 3영역

  • 메소드 : 클래스 정보나 메소드 정보를 담아둠. 명령어를 담아둠
  • 힙 : 참조 타입 변수를 저장함
  • jvm스택 : 기본 타입 변수를 저장함.

참조 타입의 특징

  • String 처럼 일반 변수와 달리 대문자로 시작함
  • 열거, 클래스(String), 인터페이스, 배열 등이 존재한다.

비교 연산자의 특징

  • stack 영역의 값을 비교한다.
  • String의 값을 비교하면 주소만 비교하여 결과를 출력한다.

String과 참조 타입

  • String의 값 비교는 .equals()로 비교
package pack01.exstring;

import java.util.Scanner;

public class Ex01_String {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String str1 = "CD";
		String str2 = "CD";		
		String str3 = scan.nextLine();
		System.out.println("str1 : "+ System.identityHashCode(str1));
		System.out.println("str2 : "+ System.identityHashCode(str2));
		System.out.println("str3 : "+ System.identityHashCode(str3));
		if (str1 == str2) {
			System.out.println("메모리 번지 수 같음");
		} else {
			System.out.println("메모리 번지 수 다름");
		}

		if (str1.equals(str2)) {
			System.out.println("값 같음");
		} else {
			System.out.println("값 다름");
		}
	}
}

null과 null pointer exception

  • String의 값으로 null을 넣을 수 있다.
  • null으로 선언 시 힙 영역의 위치만 지정하고 내 값은 부여하지 않는다.
  • 값이 없는 변수를 가져오고자 하는 경우 null pointer exception 오류가 발생한다.
  • exception : 프로그램이 실행 된 후 발생하는 오류(예외)
  • 변수 선언 후 초기화 전에 사용하려는 것과 같은 현상.
  • 해결 방법 : 해당 객체가 null이 아닌 상태로 만든다. null을 if문으로 체크해서 해당 코드가 실행이 안 되도록 막는 방법도 있다.
  • new 명령을 통해 새로운 객체를 생성하고 거기에 값을 할당할 수 있다.
package pack01.exstring;

import java.util.Scanner;

public class Ex02_StringNull {
	public static void main(String[] args) {
		
		Scanner scan = null;
		String str1 = new String("A");
		String str2 = new String("A");
//		if (scan != null) {
//			scan.nextLine();
//		}
//		if (null != scan) {
//			scan.nextLine();
//		}
		if (str1 == str2) {
			System.out.println("같음");
		} else {
			System.out.println("다름");
		}
	}
}

배열

  • 많은 양의 데이터를 적은 코드로 처리하는 방법
  • 동일한 자료형에 정해진 수를 저장하고 사용하는 객체이다.
  • 각 데이터는 index 주소로 구분한다.
  • 배열의 크기는 변경이 불가능하다.
  • 배열의 선언 int[] intArr = new int[10];
  • 각 배열의 값은 intArr[0] 식으로 접근

테스트

  • int형 데이터 타입을 묶어 놓은 배열 intArray를 선언
  • intArray를 크기 10을 주고 초기화를 한다.
  • for문으로 전체 배열에 값을 할당
  • for문으로 전체 배열에 값을 출력
  • for문을 이용해 전체 배열의 평균값을 출력
package Pack02.exarray1;

public class Test01_Array {
	public static void main(String[] args) {
		int[] intArr = new int[10];
		for (int i = 0 ; i<10; i++) {
			intArr[i]=i+1;
			System.out.println(intArr[i]);
		}
		double sum = 0;
		for (int i=0; i<10; i++) {
			sum+= intArr[i];
		}
		System.out.println(sum/10);
	}
}

배열

  • 데이터 타입[] : 1차원 배열, 데이터가 1개 이상 있다.
  • 내용물 없고, 길이도 모르지만 변수 명은 선언하고 싶은 경우 =null로 초기화한다.
  • String 타입을 담을 수 있는 sArr라는 배열을 만들고 크기 10을 할당하기
  • 각 배열의 index에 이름 1~10까지의 값을 저장하고 출력
public class Ex02_Array {
	public static void main(String[] args) {
		
		String[] sArr = new String[10];
		for (int i=0; i<10; i++) {
			sArr[i] = "이름" + (i+1);
			System.out.println(sArr[i]);
		}
	}
}

테스트

  • 구구단 2단 결과를 모두 저장할 수 있는 배열을 자유롭게 만들고 저장 후 출력하기
    • 출력 결과도 배열로 작성하기
  • 배열을 이용하여, 배열에 다음의 값들이 for문을 이용해서 저장 되게 하고 출력하기
  • 0~4까지 ★1~5개 찍기
package Pack02.exarray1;

public class Test02_Array {
	public static void main(String[] args) {
		int[] multi = new int[9];
		for (int i=0; i<9; i++) {
			multi[i] = (i+1) * 2;
			System.out.println("2 x " + i +" = " + multi[i]);
		}
		
		String[] star = new String[5];
		for (int i=0; i<5; i++) {
			star[i]="";
			for (int j = 0; j<= i ; j++) {
				star[i] += "★";
			}
			System.out.println(star[i]);
		}

	}
}

'공부일지' 카테고리의 다른 글

230926 (Java)  (0) 2023.09.26
230926 (HTML)  (0) 2023.09.26
230925 HTML  (0) 2023.09.25
230922 (Java)  (0) 2023.09.22
230922 (HTML)  (0) 2023.09.22