study/Java

[sist] 2024.01.16_Java : Variable Array(가변배열), 사용자 정의 데이터형을 사용한 배열, inheritance(상속), super

듀2 2024. 2. 5. 23:55

* 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생성)
728x90