Chap 11 메소드 오버로딩 과 String 클래스
- 메소드 오버로딩
- 클래스 내에서 메소드 이름이 같고 매개변수의 수 또는 type이 다른 경우
- 메소드의 반환형은 무관하다. 이는 호출할 메소드를 선택하는 데 있어서의 판단 기준이 아니기 때문이다.
- this
- 다른 생성자의 호출
- this( , ) 와 같이 한 생성자에서 다른 생성자를 호출할 수 있다. 여기서 this는 오버로딩된 다른 생성자를 의미한다.
- 인스턴스 변수의 접근
- 인스턴스 변수와 매개변수의 이름이 같을 때 this.[인스턴스 변수]를 통해 인스턴스 변수에 접근이 가능하다.
- String 클래스
- 인스턴스 생성
- String s = new String("123")
- String s = "123" => " "만으로도 String 인스턴스가 생성이 된다.
- " " 로 생성된 경우 내용이 일치하면 같은 인스턴스를 가리키며 new로 생성된 경우는 내용과 관계없이 무조건 다른 인스턴스가 된다.
=> String의 인스턴스가 같은지 확인하려면 == , 내용이 일치하는지 확인하려면 equals() 메소드를 활용해야 한다.
- String 클래스의 메소드
- concat() : 문자열 연결 => str1.concat(str2)
- substring() : 문자열 추출 => str1.substring(beginIdx) , str1.substring(beginIdx,endIdx) // beginIdx~endIdx-1
- 문자열 비교 : equals() // true false //, compareTo() // 0, 음수, 양수 //, compareToIgnoreCase()
- valueOf() : 기본 자료형의 값을 문자열로 변환 => String s = String.valueOf(int1);
- String Builder 클래스
- 내부적으로 문자열을 저장하기 위한 메모리 공간을 지녀 문자를 추가하거나 삭제하는 것이 가능하다.
- 메모리 공간을 스스로 관리하여 부족하면 늘리지만 이는 시간이 소요되므로 new StringBuilder(64)와 같이 미리 크기를 할당할 수 있다.
- append(), delete(), insert(), replace(), reverse(), substring(), toString()
Chap 12 콘솔 입력과 출력
- System.out.print / println
- 위 두 메소드는 참조 값이 전달되면, 이값의 인스턴스를 대상으로 toString 메서드를 호출하고 반환되는 문자열을 출력 한다.
=> StringBuilder 클래스의 인스턴스를 출력할 때 toString을 안 써도 출력이 되는 이유이다.
=> 임의의 클래스가 toString() 메소드가 있다면 해당 메소드로 출력이 가능하다
(toString() 메소드의 반환형이 String이 아니면 에러가 뜬다.)
- Scanner
- 생성자로 전달되는 대상으로부터 데이터를 추출하는 기능을 제공한다. ex) File, String, InputStream
- 키보드로 입력을 받을 때에는 new Scanner(System.in)
- 추출 메소드 : nextInt() , nextLine(), nextByte(), nextDouble(),...
Chap 13 배열
- 배열
- int[] ref = new int[5] , int[] ref = new int[] = {1,2,3} , int[] ref = {1,2,3} ...
- int[]형으로 선언된 참조변수는 int형 1차원 배열을 길이에 상관없이 참조할 수 있다.
- 인스턴스 배열도 선언이 가능하다.
- String sr = new String[7] ; sr[0] = new String("asb"); 와 같이 인스턴스를 저장한다.
=> 참조변수 - 배열 인스턴스 - Box 인스턴스
- 다양한 메소드 : fill() , arraycopy()
Chap 14 클래스의 상속 1 : 상속의 기본
- 상속
- 기존에 정의된 클래스에 메소드와 변수를 추가하여 새로운 클래스를 정의하는 것으로 연관된 일련의 클래스들에 대해 공통적인 규약을 정의할 수 있게 한다.
- 상속은 코드의 재활용을 위한 문법이 아니다. // 다른 클래스를 사용하기 위한 틀일 수도 있다.
- UML 기호 -> 로 나타낼 수 있으며 방향은 [하위,유도,자식 클래스] -> [상위,기초,부모 클래스]
- 상속과 생성자
- 하위 클래스의 인스턴스 생성 시 상위클래스, 하위 클래스의 생성자 모두 호출되며 이때 상위 클래스의 생성자가 먼저 호출된다.
- 하위 클래스의 인스턴스 생성 시 명시적으로 super()를 활용하여 상위 클래스의 생성자를 호출할 수 있다. 이를 통해 여 러가지 생성자가 있을 경우 선택하여 생성자를 호출할 수 있다.
- super()는 생성자의 body 중 가장 윗부분에 있어야 하며 그렇지 않을 경우 컴파일 오류가 난다.
- 만약 서로 다른 인자를 가진 생성자들이 있으며 super()를 사용하지 않을 경우 인자가 없는 super()가 삽입된다.
- 자바는 상속 관계에 있을지라도, 상위 클래스의 멤버는 상위 클래스의 생성자를 통해서 초기화하도록 권장한다.
- 클래스 변수, 메서드와 상속
- static 선언이 붙는 클래스 변수와 클래스 메소드의 경우 인스턴스에 속하지 않는, 단 하나만 존재하는 것으로 상속의 대상이 아니다.
- 상속의 대상이 아니어도 접근 수준 지시자가 허용하면 변수의 이름으로 직접 접근이 가능하다.
Chap 15 클래스의 상속 2 : 오버라이딩
- 상속을 위한 두 클래스의 관계
- IS-A 관계 (~은 ~이다.)
- ex) smart phone IS A mobile phone ...
- 메소드 오버라이딩
- MobilePhone p = new SmartPhone(... , ...) 이 가능하지만 SmartPhone의 메소드는 참조할 수 없다.
- 참조변수가 참조하는 인스턴스의 종류에 상관없이, 참조 변수의 형에 해당하는 클래스와 해당 클래스의 상위 클래스에 정의된 메소드들만 호출이 가능하다.
- JAVA는 static type checking으로 구현되어있기 때문이다.
- 참조변수 간 대입과 형 변환
- 상위 클래스 = 하위 클래스 // 가능 : 하위 클래스 인스턴스는 상위 클래스의 인스턴스이기도 하기 때문이다.
- 하위 클래스 = 상위 클래스 // 불가능
- Cake c= new CheeseCake(); // CheeseCake 인스턴스 생성
CheeseCake cc = (CheeseCake) c ; // 프로그래머가 명시적 형 변환을 통해 보장하는 것으로 가능하지만 조심
- 메소드 오버라이딩
- 상위 인스턴스의 메소드를 무효화시키는 것으로 [ 메소드 이름, 반환형, 매개변수 선언 ]이 모두 일치해야 한다.
- Cake c = new CheeseCake(); c.yummy() // Cake 형이지만 CheeseCake의 yummy가 오버라이딩 되어 CC의 yummy 호출
- 오버라이딩 된 메소드는 외부에서 호출할 수 없으나 내부에서 super.[메소드 이름] 을 통해 호출 가능하다.
- 인스턴스 변수, 클래스 변수
- 오버라이딩이 되지 않으며 참조변수의 type에 따라 접근하는 변수가 결정된다.
- instancof 연산자
- 참조변수가 "참조하는 인스턴스"의 클래스나 상속하는 클래스를 묻는 연산자로 boolean 반환 값을 가진다.
- 명시적 형 변환의 가능성을 판단해주는 연산자이다.
Chap 16 : 클래스의 상속 3 : 상속의 목적
- final
- 해당 클래스를 다른 클래스가 상속하는 것을 원치 않는 경우.
- 해당 메소드를 다른 클래스가 오버라이딩 하는 것을 원치 않는 경우.
- @Override
- annotation으로 제대로 오버라이딩 했는지 컴파일러가 확인해준다.
- 메소드의 매개변수 형과 반환형 등이 달라 프로그래머의 실수로 오버라이딩이 안된 경우 @Override를 통해 의도치 않 은 에러를 잡아낼 수 있다.
+ 추가 자료
- 자바는 컴파일러 언어일까 인터프리터 언어일까?
- 자바는 컴파일러 + 인터프리터를 둘 다 사용한다.
- [.java] => 컴파일러 => [.class] => JVM => [이진 코드]
'JAVA' 카테고리의 다른 글
[JAVA] 자바 기초 IV (0) | 2022.07.23 |
---|---|
[JAVA] 자바 기초 III (0) | 2022.07.22 |
[JAVA] 자바 기초 I (0) | 2022.07.16 |