JAVA

[JAVA] 자바 기초 II

최선을 다하는 2022. 7. 20. 11:19

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