Programming Language/Java

Java 4일차 곡뢀(μ°Έμ‘° νƒ€μž…)

chaerlo127 2022. 1. 30. 00:59
728x90

1. κΈ°λ³Έ νƒ€μž… VS μ°Έμ‘° νƒ€μž…

 

κΈ°λ³Έ νƒ€μž…: byte, char, short, int, long, float, double, boolean λ³€μˆ˜κ°€ μ‹€μ œ 값을 λ³€μˆ˜ μ•ˆμ— μ €μž₯ 

-> μŠ€νƒ μ˜μ—­μ— 직접 값을 가짐

 

μ°Έμ‘° νƒ€μž…: λ°°μ—΄, μ—΄κ±°, 클래슀, μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜κ°€ λ©”λͺ¨λ¦¬ λ²ˆμ§€λ₯Ό λ³€μˆ˜ μ•ˆμ—( μ €μž₯ ( ex. String type)

-> νž™ μ˜μ—­μ˜ 객체 μ£Όμ†Œ 가리킴

 

-> λ¬Έμžμ—΄μ΄ 직접 λ³€μˆ˜μ— μ €μž₯λ˜λŠ” 것이 μ•„λ‹ˆλΌ, λ¬Έμžμ—΄μ€ String 객체둜 μƒμ„±λ˜κ³  String 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” 것이닀. 

즉, String a = "μ•ˆλ…•";μ΄λΌλŠ” μ½”λ“œμ—μ„œλŠ” μ•ˆλ…•μ€ String 객체둜 μƒμ„±λ˜μ–΄μ„œ νž™ μ˜μ—­μ— μ €μž₯ 되고, aλŠ” μŠ€νƒ μ˜μ—­μ— μ €μž₯λ˜μ–΄ "μ•ˆλ…•" νž™ μ˜μ—­μ˜ λ²ˆμ§€λ₯Ό μ €μž₯ν•œλ‹€.

 

 

2. λ©”λͺ¨λ¦¬ μ‚¬μš© μ˜μ—­(Runtime Data Area)

: JVM(Java Vritual Machine)이 μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­

  • λ©”μ†Œλ“œ μ˜μ—­

JVM이 μ‹œμž‘ν•  λ•Œ, μƒμ„±λ˜κ³  λͺ¨λ“  μŠ€λ ˆλ“œκ°€ 곡유

μ •μ ν•„λ“œ(static field)/μƒμˆ˜(constrant), λ©”μ†Œλ“œ μ½”λ“œ, μƒμ„±μž(constructor) μ½”λ“œλ₯Ό λΆ„λ₯˜ν•΄μ„œ μ €μž₯

 

  • νž™ μ˜μ—­(Heap Area)

객체와 배열이 μƒμ„±λ˜λŠ” μ˜μ—­

μƒμ„±λœ 객체와 배열은 JVM μŠ€νƒ μ˜μ—­μ˜ λ³€μˆ˜λ‚˜ λ‹€λ₯Έ 객체의 ν•„λ“œμ—μ„œ μ°Έμ‘°

 

  • JVM μŠ€νƒ μ˜μ—­

λ©”μ†Œλ“œ ν˜ΈμΆœλ§ˆλ‹€ ν”„λ ˆμž„μ„ μΆ”κ°€ν•˜κ³ , λ©”μ†Œλ“œ μ’…λ£Œλ˜λ©΄ ν•΄λ‹Ή ν”„λ ˆμž„μ„ 제거 

public static void main(String args[])
{
	int a = 0;
    if(a == 0){
    	int b = 1;
        String c = "HI";
	}
}

if 블둝 내뢀에 μžˆμ„ λ•Œμ—λ§Œ b, cκ°€ μ‘΄μž¬ν•˜κ³ , if λΈ”λ‘μ—μ„œ λΉ μ Έλ‚˜κ°€λ©΄ b, cλŠ” μ†Œλ©Έλœλ‹€.

 

 

3. μ°Έμ‘° λ³€μˆ˜ ==, != / null, NullPointerException

λ™μΌν•œ 객체λ₯Ό μ°Έμ‘°ν•˜λŠ”μ§€, λ‹€λ₯Έ 객체λ₯Ό μ°Έμ‘°ν•˜λŠ”μ§€ μ•Œμ•„λ³΄κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€. (λ™μΌν•œ λ²ˆμ§€ 값을 가지고 μžˆλŠ”μ§€ 확인)

λ˜ν•œ, μ°Έμ‘° νƒ€μž… λ³€μˆ˜λŠ” Null(νž™ μ˜μ—­μ˜ 객체λ₯Ό μ°Έμ‘°ν•˜μ§€ μ•ŠλŠ”λ‹€.)을 κ°€μ§ˆ 수 μžˆλ‹€.

 

4. 객체 μ—°μ‚°μž(new μ—°μ‚°μž)

νž™ μ˜μ—­μ— μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€. -> μƒˆλ‘œμš΄ λ²ˆμ§€μˆ˜λ₯Ό λ‚˜νƒ€λ‚Ό λ•Œ μ‚¬μš©

new μ—°μ‚°μžλŠ” λ©”λͺ¨λ¦¬ ν• λ‹Ή, μ‹œμž‘ μ£Όμ†Œ λ°˜ν™˜, constructor(μƒμ„±μž) 호좜의 역할도 ν•œλ‹€.

 

public static void main(String[] args) {
		String v1 = "a";
		String v2 = "a";
		
		if(v1 == v2) {
			System.out.println("v1κ³Ό v2λŠ” κ°™μŠ΅λ‹ˆλ‹€.");
		}else {
			System.out.println("v1κ³Ό v2λŠ” λ‹€λ¦…λ‹ˆλ‹€."); // λ²ˆμ§€, λ¬Έμžμ—΄ λͺ¨λ‘ κ°™μŒ
		}
		
		if(v1.equals(v2)) {
			System.out.println("v1κ³Ό v2의 λ¬Έμžμ—΄μ€ κ°™μŠ΅λ‹ˆλ‹€.");
		}else {
			System.out.println("v1κ³Ό v2의 λ¬Έμžμ—΄μ€ λ‹€λ¦…λ‹ˆλ‹€.");
		}
		
		String v3 = new String("a");
		String v4 = new String("a"); //λ²ˆμ§€λŠ” λ‹€λ₯΄κ³ , λ¬Έμžμ—΄μ€ κ°™μŒ
		
		if(v3 == v4) {
			System.out.println("v3κ³Ό v4λŠ” κ°™μŠ΅λ‹ˆλ‹€.");
		}else {
			System.out.println("v3κ³Ό v4λŠ” λ‹€λ¦…λ‹ˆλ‹€.");
		}
		
		if(v3.equals(v4)) {
			System.out.println("v3κ³Ό v4의 λ¬Έμžμ—΄μ€ κ°™μŠ΅λ‹ˆλ‹€.");
		}else {
			System.out.println("v3κ³Ό v4의 λ¬Έμžμ—΄μ€ λ‹€λ¦…λ‹ˆλ‹€.");
		}
	}

 

 

5. λ°°μ—΄

같은 νƒ€μž…μ˜ 데이터λ₯Ό μ—°μ†λœ 곡간에 λ‚˜μ—΄ν•˜κ³ , 각 데이터에 인덱슀λ₯Ό 뢀여해놓은 μžλ£Œκ΅¬μ‘°μ΄λ‹€. μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘ν•œλ‹€.

1. 배열은 같은 νƒ€μž…μ˜ λ°μ΄ν„°λ§Œ μ €μž₯
2. ν•œ 번 μƒμ„±λœ 배열은 λŠ˜λ¦¬κ±°λ‚˜ 쀄일 수 μ—†μŒ

 

  • λ°°μ—΄[] λ³€μˆ˜;
  • λ°°μ—΄ λ³€μˆ˜[];

 

λ°°μ—΄ 생성이 된 ν›„μ—λŠ” μ€‘κ΄„ν˜Έλ‘œ λ°°μ—΄ 값을 λ„£λŠ” 경우 컴파일 μ—λŸ¬κ°€ λ°œμƒν•˜κ²Œ λœλ‹€.

int[] array;
array = {1, 2, 3}; // 컴파일 μ—λŸ¬

즉, λ‚˜μ€‘μ— μ€‘κ΄„ν˜Έλ‘œ λ°°μ—΄ 값을 λ„£λŠ” κ²½μš°μ—λŠ” new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œλ‹€.

int[] array;
array = new int[]{1, 2, 3}

 

Parameterκ°€ 배열인 κ²½μš°μ—λ„, new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 컴파일 μ—λŸ¬κ°€ λ‚˜μ§€ μ•Šλ„λ‘ ν•΄μ•Όν•œλ‹€.

method(int[] array){...}

int result = method(new int[]{});

 

  • new μ—°μ‚°μžλ‘œ λ°°μ—΄ 생성

미리 배열에 값을 μ €μž₯ν•˜κ³ μž ν•  λ•ŒλŠ” 미리 new μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜μ—¬ λ°°μ—΄ 객체λ₯Ό μƒμ„±ν•˜λ„λ‘ ν•˜μž.

int[] array = new int[10]; // int λ³€μˆ˜ 10개λ₯Ό μ €μž₯ν•  λ°°μ—΄ μ €μž₯μ†Œλ₯Ό μƒμ„±ν•œλ‹€.
public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);	
		int[] array = new int[5];
		int a;
		int sum = 0;
		for(int i = 0; i<5 ;i++) {
			System.out.print("숫자λ₯Ό μž…λ ₯ν•˜μ„Έμš”");
			a = scanner.nextInt();
			array[i] = a;
		}
		
		for(int i = 0; i<5;i++) {
			sum += array[i];
		}
		System.out.println("ν•©: " + sum);
		scanner.close();
}

 

 

Array에 값이 μ €μž₯된 것을 확인할 수 μžˆλ‹€.

 

  • λ°°μ—΄μ˜ 길이λ₯Ό μ•ŒκΈ° μœ„ν•΄μ„œλŠ” λ°°μ—΄ λ³€μˆ˜μ˜ 이름.lengthλ₯Ό μž…λ ₯ν•˜λ©΄ λœλ‹€.
int[] array = new int[10];
System.out.println(array.length);// consoleμ—λŠ” 10이 λ‚˜μ˜€κ²Œ 됨.

 

6. 닀차원 λ°°μ—΄ ( [][] )

ν–‰ X μ—΄

int[][] array = new int[3][2];

 

(0, 0) (0, 1)
(1, 0) (1, 1)
(2, 0) (2, 1)

μœ„ κ·Έλž˜ν”„ 처럼 ν–‰λ ¬μ˜ ν˜•νƒœλ‘œ 값이 μ €μž₯되게 λœλ‹€.

 

int[][] array = new int[3][2];

array.length //3
array[0].length // 2
array[1].length // 2
array[2].length // 2

 

int [][] array = new int [3][]; // 행은 3μ΄μ§€λ§Œ, μ—΄μ˜ 값은 정해지지 μ•ŠμŒ
array[0] = new int[2]; // 첫 번째 ν–‰μ˜ 열은 2
array[1= = new int[3] // 두 번 μ§Έ ν–‰μ˜ 열은 3

String[]은 Stringκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ μ°Έμ‘° νƒ€μž…μ΄λ‹€. 

 

public static void main(String args[])
	{
		String [] array = new String[3];
		array[0] = "A";
		array[1] = "A";
		array[2] = new String("A");
		
		System.out.println(array[0]==array[1]); // true
		System.out.println(array[0]==array[2]); // false 
		System.out.println(array[0].equals(array[2])); //true
	}

 

7. λ°°μ—΄ 볡사

배열을 λ³΅μ‚¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” forλ¬Έ, System.arrayCopy()을 μ‚¬μš©ν•œλ‹€.

/*
	for λ¬Έ μ‚¬μš©ν•˜μ—¬ λ°°μ—΄ 볡사
*/
int oldArray[] = {1, 2, 3};
		
int newArray[] = new int[5];
for(int i = 0; i < oldArray.length ; i++) {
	newArray[i] = oldArray[i];
	System.out.print(newArray[i] + " ");
}
System.arrayCopy(Object src, int srcPos, Object dest, int destPos, int length);

oldArray_indexλΆ€λΆ„μ—λŠ” 볡사λ₯Ό μ‹œμž‘ν•  인덱슀의 값을 λ„£μœΌλ©΄ 되고, newArray_indexλŠ” μƒˆ λ°°μ—΄μ—μ„œ 뢙여넣을 μ‹œμž‘ 인덱슀의 값을 λ„£μœΌλ©΄ λœλ‹€. λ˜ν•œ lengthλŠ” 볡사할 κ°œμˆ˜μ΄λ‹€.

μ˜ˆμ‹œλ₯Ό ν†΅ν•΄μ„œ μ•Œμ•„λ³΄λ„λ‘ ν•˜μž.

int[] oldArray = {1, 3, 4, 5};
int[] newArray = new int[5];
		
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
		
for(int i=0; i<newArray.length; i++) {
	System.out.println(newArray[i]);
}

 

 

8. ν–₯μƒλœ forλ¬Έ(λ°°μ—΄)

ν–₯μƒλœ forλ¬Έμ—μ„œλŠ” 증감식과 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. λ˜ν•œ, μ„Έλ―Έ μ½œλ‘ μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³ , 콜둠(:)을 μ‚¬μš©ν•œλ‹€.  

int[] numbers = {2, 4, 6, 11, 14};
int sum = 0;
for(int number:numbers) { //numbers λ°°μ—΄μ—μ„œ 읽을 값이 있으면 number을 μˆ˜ν–‰ν•œλ‹€.
	sum +=number;
}
System.out.println(sum);

 

[좜처]

ν˜Όκ³΅μžλ°” P.169~198

728x90