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;
}
}
클래스 문법
클래스의 용도
- 메서드 분류 : 코드 관리가 쉽고 재사용성이 높아짐.
- ex) UserCommand
- 데이터 타입 정의 : 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 라이센스를 따릅니다.