2일차
ch.V Arrays
<Array>
같은 데이터타입을 가지는 여러값들이 하나의 변수를 통해서 한방에 처리되는 것.
★★★ 3단계 문법
※syntax
①선언 -> int[] i; or int i[]; // "int[]" : 데이터 타입 "i": reference variable
★선언할때 사이즈를 명시하면 안된다
②생성 -> i = new int[3]; //
★ new 사용
★ new 다음 []에 size 명시
new로 메모리 할당시 묵시적 초기화가 이루어진다.
int[] i = new int[3];
★Memory 도식화
③초기화
int[] i = {13, 27, 38}; // ";"은 생성자 호출이라 볼 수 있다
sample.
1. int 타입의 배열 생성(사이즈는 3) -> int[] arr = new int[3];
2. 각각의 칸에 적당한 값으로 초기화 -> arr[0] = 1; arr[1] = 2; arr[2] = 3;
3. for 문을 이용해서 값들을 콘솔창에 출력 -> for (int i = 0; i < arr.length; i++) System.out.println("arr["+i+"]:"+arr[i]);
ch.VI Class Design
<Inheritance>
[Sub, Child] class
1. Abstraction(추상화, 일반화)
다양한 Sub Class들 사이에서 공통적인 성질을 추출. 이 공통적인 성질을 일반적으로 갖는 독자적인 모듈을 윗단에 상정하는 것.
[Super, Parent] Class
상속: 부모가 가진 모든것(member)이 자식에게 물려짐 + 자기자신만의 member 추가
cf. Constructor는 member가 아니다
ex)
class Manager extends Employee{
String dept;
}
class Engineer extends Employee {
String tech;
}
<Polymophism> -> Method Overriding / Method Overloading
부모type으로 자식 객체 생성
Clothes 긴팔T = new Shirt(0, 0, 0);
부모type 자식객체
<Virtual Method Invocation의 원리>
1. Compile Time Type : 부모의 메모스를 호출
2. Runtime Type : 자식의 메소드가 실행
"상속관계의 오버라이딩된 메소드에서만 발생하는 원리"
<Method Overriding의 Rule> p.6-9
0. [전제조건] 반드시 상속관계의 두 클래스 사이에서 일어남
1. Method의 선언부는 모두 일치(리턴타입, 이름, 인자값)
2. More Modifier / Less Exception (부모 보다 자식의 Access Modifier가 More Modifier 이어야 한다)
3. 구현부는...{// } 반드시 달라야 한다
> 즉 선언부는 같지만 Method의 기능이 달라졌기에 새로운 Method의 재탄생으로 봐야한다
> "메소드 재정의"
<Overriding의 대표적인 사례>
<Method Overloading>
1. 상속과 전혀 상관없다
2. Method 이름 같다
3. Argument List는 반드시 달라야(순서, 갯수, 타입 중 하나라도)
★★
4. return type 상관없다
"하는일은 같지만 처리하는 데이터를 달리할때"
Class Hierachy
<Object Class>
equals() - 객체가 같은지는 주소값으로 비교
toString() - 기본적으로 생략되어 있다, 그래서 주소값은 문자열로 출력된다
sample.
class 인어공주 extends 여자 implements 물고기
<Constructor> (마무리 - 상속관계에서의 생성자)
<Access Modifier>
<Exceoption>
<swich에 들어올 수 있는 자료형>
byte, short, int, char
<package>
ch.VII
<Interface>
기능중심
다중상속 지원
interface Flyer {
[public] [static] [final] int x = 10; // public, static, final 기본적으로 생략되어 있음
[public] [abstract] void fly(); // public, abstract 기본적으로 생략되어 있음
void land();
void fly();
}
추상적인 method들의 집합
interface를 상속받는 클래스는 모든 member method를 구현해주어야 한다
interface는 abstract의 set
abstract는 완전한 super 클래스로만 쓴다
구성요소
1. abstact Method
2. Constant
<static>
1. 객체를 생성하기 이전에 Memory에 올라간다
-> 객체 생성하지않고 바로 사용해도 된다 ex) switchIt(4); -> public static void switchIt(int x) { }
2. 생성된 객체들이 static Member를 공유
3. ex) static int j = 0; -> local로 선언될 수 없다
4. static Area 에서는 this 사용할 수 없다
5. final : "내가 마지막이야"
final static 같이 쓴다(순서 바꿔서 static final도 가능) ex) final static int SIZE_MAX = 100; 상수를 지정하는 변수의 이름은 대문자로 한다
final class : "상속 금지"
final method : "overriding 금지"