* Variable Array(가변배열)
- 행마다 열의 개수가 다른 배열.
- 이차원 배열 형식.
사용법)
선언 > 생성 > 행마다 열을 생성 > 값 할당 > 사용
1. 선언)
데이터형[][] 배열명 = null;
int[][] arr = null;
2. 생성) - 주의: 행만 설정한다. (열을 설정하지 않는다. -> 설정 시 이차원 배열이 됨)
배열명 = new 데이터형[행의수][];
arr = new int[4][];
3. 행마다 열을 생성)
배열명[행의번호] = new 데이터형[열의수];
배열명[행의번호] = new 데이터형[]{초기값,,,,};
arr[0] = new int[4];
arr[1] = new int[3];
arr[2] = new int[]{1, 2};
arr[3] = new int[]{1, 2, 3, 4, 5};
4. 값 할당) - 배열의 인덱스에 주의
배열명[행의번호][열의번호] = 값;
arr[0][0] = 10;
arr[1][2] = 20;
5. 값 사용) - 배열의 인덱스에 주의
배열명[행의번호][열의번호]
arr[0][0]

* 일괄처리
for(int i = 0; i < 배열명.length; i++){ // 행의 인덱스
for(int j = 0; j < 배열명[행의번호].length; j++){ // 열의 인덱스
배열명[i][j];
}
}
* class
- 참조형 데이터 형: 값은 메모리의 다른 곳에 생성되고 그 시작 주소를 저장하는 데이터 형
- 사용자 정의 데이터 형: 언어에서 제공하는 데이터 형(기본형 데이터 형)을 조합하여, 새로운 이름의 데이터 형을 만드는 것
* 값을 저장하기 위해 언어에서 제공하는 이름이 있는 예약된 공간
- 단일 정보: 나이 -> int, 이름 -> String
- 학생의 정보를 저장 -> 단일 데이터가 아님 -> 자바에서 제공하는 int, long, char 형으로는 값을 저장할 수 없다.
- 학생의 정보는 이름, 나이, 키, 몸무게, 이메일을 값으로 저장해야 한다.
- 학생의 정보는 String, int, double, double, String으로 묶여진 데이터 형이다!!!
- 업무를 구현하지 않고, 값을 저장하기 위해 만드는 클래스.
- 사용자 정의 데이터 형으로 클래스를 만들 때에는 클래스명 뒤에 VO(Value Object)를 붙여준다.
- class는 instance variable, constructor, getter method, setter method로만 구성된다.
public class StudentInfoVO{
private String name;
private int age;
pirvate double height;
private double weight;
private String email;
public StudentInfo(String name, int age, double height, double weight, String email){
인스턴스 변수에 값 할당 코드
}
setter(){
}
getter(){
}
}
-> StudentInfoVO가 데이터형 명
- 참조형 데이터 형이므로 객체를 생성하여 사용
사용법)
1. 선언)
데이터형 변수명 = 값;
StudentInfoVO siVO = null;
2. 생성
변수명 = new Constructor();
si = new StudentInfoVO("쵸파", 20, 120.4, 25.8, "test@test.com");
// 각각 분할된 정보를 하나의 이름(si)으로 저장하고 사용할 수 있다.

* 사용자 정의 데이터 형을 사용한 배열
- 방 하나에 여러 개의 값을 저장할 수 있다.
1. 배열 생성)
StudentVO[] stuArr = new StudentVO[3]; // 번호, 이름, 나이
2. 값 할당)
stuArr[0] = new StudentVO(1, "홍길동", 20);
StudentVO sVO = new StudentVO(값,,);
stuArr[1] = sVO;
3. 방의 값을 변경) => setter method 사용
배열명[인덱스](VO객체).method를 호출
stuArr[0].setAge(25);
4. 값 얻기) => getter method 사용
String name = stuArr[0].getName();
클래스명 객체명 = 배열명[인덱스];
StudentVO sVO = stuArr[0];
String name = sVO.getName();

* inheritance(상속)
- OOP 언어의 3가지 특징 중 하나.
- 코드의 재 사용성 향상.
- 재 사용성: 부모 클래스에 정의된 자언(변수, method)를 자식 클래스에서 자신의 것처럼 사용하는 것.
- 클래스간의 계층이 생성.

- extends 키워드로 자식 클래스에서 부모 클래스를 선택하는 것.
- 부모는 자식을 모른다.

- 자식은 부모이다. (자식 클래스에서는 부모 클래스의 기능을 자신의 것처럼 사용.)
-> 상속: is a 관계
문법)
접근지정자 class 클래스명 extends 부모클래스명 implements 구현인터헤이스명,,,{
}
- 상속할 부모 클래스: 하나만 정의 가능 => 단일 상속만 지원
- 구현할 인터페이스: 여러 개 정의 가능
- 단일 상속만 지원: 부모가 명확하다, 클래스의 크기가 필요이상 커지지 않는다. 기능 확장에 제약이 있다.
- java에서 최상위 부모클래스는 java.lang.Object 클래스이다.



c.age = 10; // 사용가능
c.name = "hell"; // tkdydrksmd
c.msg = "사용가능"; // 자식의 주소로부터 유일한 이름이므로 사용 가능.
super.age = 20; // this를 걷어내고 사용하려는 대상을 찾는다.
// 부모와 같은 이름의 변수나 method가 존재하는 경우 => 자식의 변수나 method를 사용하게 된다.
* super
- 상속 관계에서 부모 클래스의 자원을 식별하여 사용할 수 있는 키워드.
- method 형식, keyword 형식 두 가지로 사용할 수 있다.
* keyword 형식
- 자식 클래스의 변수나 method가 부모 클래스의 이름과 같다면 super를 사용하여 부모의 변수와 자식의 변수를 식별하여 사용할 수 있다.
- this와 다르게 super는 출력할 수 없다.
- instance 영역에서만 사용할 수 있다.
- 자식 클래스에서 사용.
문법)
super.변수명 // 자식과 부모가 같은 이름의 변수를 가질 때
super.method명(); // 자식과 부모가 같은 이름의 method를 가질 때

* method 형식
- 부모 클래스의 생성자를 호출할 때 사용.
- 모든 클래스의 생성자 첫 줄에는 부모 클래스의 기본 생성자를 호출하는 super()가 숨어있다. (부모 클래스의 기본 생성자가 없다면 error 발생)
사용법)
부모 클래스의 기본 생성자를 호출
super();
부모 클래스의 매개벼눗 있는 생성자를 호출
super(값,,,);
* 객체화의 형태
public class Parent{
}
public class Child extends Parent{
}
Child c = new Child();
Parent p = new Parent();
Parent p1 = new Child(); // 자식은 부모이다!! 자식은 부모와 같다.
Object obj = new Child();
Child c1 = new Parent(); // 불가, 부모가 생성(Parent 생성 -> Object 생성, Parent생성)