포스트

16. 자바 기초와 클래스

자바의 기초 언어와 클래스에 대하여 공부하자.

16. 자바 기초와 클래스

다차원 배열

1
2
3
4
int[][] arr = new int[3][];  // [ 400[ int - ] ][ 500[ int - ] ][ 600[ int - ] ]
arr[0] = new int[]{ - }      // 400[ 0[ - ]]
arr[1] = new int[3]          // 500[ 1[ - ]]
arr[2] = new int[4]          // 600[ 2[ - ]]
  • 다차원 배열에서는 앞 배열 크기만 확정하면 뒤는 굳이 크기를 할당하지 않아도 사용할 수 있다.

사이즈 고정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//물론 뒤에도 크기를 할당해 사이즈를 고정 시킬 수 있다.
int[][] arr = new int[3][4]; // [ 400[ int - ] ][ 500[ int - ] ][ 600[ int - ] ]

// 하지만.. 위를 풀면 이런 뜻이 되는데..
arr[0] = new int[4]          // 400[ 0 [ 0 ][ 1 ][ 2 ][ 3 ]]
arr[1] = new int[4]          // 500[ 1 [ 0 ][ 1 ][ 2 ][ 3 ]]
arr[2] = new int[4]          // 600[ 2 [ 0 ][ 1 ][ 2 ][ 3 ]]

// 여기서 값을 직접 할당을 하게되면..
// 새로운 주소를 파서 값을 넣은 뒤 그 주소를 저장하게 된다.
// 즉, new int[4] <-라는 공간을 가진 가비지 값이 생기고
// new int[]{1, 2, 3, 4}를 가진 값도 메모리 공간에 차지를 하게된다는 의미이다.
//그러니까 앤간하면 쓰지말자.
arr[0] = new int[]{1, 2, 3, 4} // 1200[ 0 [ 1 ][ 2 ][ 3 ][ 4 ] ]

다양한 사용법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
String[][] arr = new String[][]{
	new String[]{"aaa", "bbb"},
	new String[]{"ccc", "ddd", "eee"}
}

String[][] arr = {
	new String[]{"aaa", "bbb"},
	new String[]{"ccc", "ddd", "eee"}
}

String[][] arr = {
	{"aaa", "bbb"},
	{"ccc", "ddd", "eee"}
}

배열의 항목 삭제

배열의 항목의 연속으로 삭제할 때엔 거꾸로 삭제하면 해결 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
int[] test = {1, 2, 3, 4, 5};
for(int i = test.length; i >=0; i--){
	System.out.print("삭제?> ")
	String go = scanner.nextLine();
	if(go.equals("y")){
		for(int j = i + 1; j < test.length; i++){
			test[i - 1] = test[i];
		}
		test[--test.length] = null;
	}
}

클래스 문법

클래스의 용도

  1. 메서드 분류 : 코드 관리가 쉽고 재사용성이 높아짐.
    • ex) UserCommand
  2. 데이터 타입 정의 : User-defined Data Type
    • ex) User

클래스 필드 사용 VS 인스턴스 필드

필드 : 클래스나 구조체 안에 선언된 변수

  • 모든 필드는 변수이지만 모든 변수가 필드라고는 할 수 없다.
  • 필드는 클래스의 속성을 정의하며 클래스의 인스턴스가 생성될 때 인스턴스의 상태를 저장함

클래스 필드(= static field)

  • 클래스 필드는 클래스에 단 한개만 존재
  • 모든 인스턴스(=객체)가 공유하는 변수로 static 키워드를 붙여 사용.
  • 모든 객체가 공유하는 상태를 저장한다.

인스턴스 필드(= non-static field = 인스턴스 변수)

  • 클래스의 각 인스턴스 마다 별도로 존재하는 변수
  • 개별 객체의 상태를 저장한다.
  • 인스턴스 변수라고도 한다.
1
2
3
4
Calss Test{
	static int staticField; // 클래스 필드
	int non_staticField;    // 인스턴스 필드
}

인스턴스 생성

1
2
3
4
5
6
7
8
class Main{
	public static void main(String[] args){
		Test.staticField = 100;     // 클래스 필드 사용_   | 클래스명.클래스_필드명;
		Test t = new Test();        // 인스턴스 필드 사용  | 클래스명 인스턴스_변수명 = new 클래스명; (인스턴스 변수 생성)
																//             
		t.non_staticField = 200;    // 변수명.인스턴스_변수명;
	}
}
  • Test t = new Test() : 클래스에 선언된 인스턴스 변수를 Heap 메모리 영역에 생성한다.
  • 인스턴스 변수만 만들어짐, 인스턴스 메서드는 만들어지지않음.

This

  • static 메서드는 ‘this’라는 built-in 변수가 없다.
  • 오직 non-static 메서드에만 this 사용 가능하다.

생성자(constructor)

  • 인스턴스 생성 후 즉시 자동 호출
  • 인스턴스를 사용하기 전에 적절한 값으로 초기화
  • 개발자가 따로 생성자를 구현하지 않으면 기본 생성자를 자동으로 추가한다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
      class Car{
      	String engin;
      	String oil;
        	
      	public car(String engin, String oil){   // 생성자 메서드는 리턴타입을 가지지않는다.
      		this.engin = engin;                   // 초기화
      		this.oil = oil;
      	}
      }
        
      class Test{    
      	String a;    // 만약 생성자를 구현하지 않으면 기본 생성자를 자동으로 추가함.
      }
    
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.