Java

Java 개발 공부 10 ~ 11 일차 (21.08.30~31)

Pearl_mini 2021. 8. 31. 21:11
728x90

부모의 생성자 호출은 자식클래스 맨 첫줄에 선언되어야 한다.

 

메소드 오버로딩과 오버라이딩의 차이 구분!! ** 면접에서 묻기 좋은 질문

 

메소드 오버라이딩 시에 자식 메소드는 부모 메소드보다 더 넓은 접근제한자를 가질 수 있으나 좁은 접근 제한자는 가질 수 없다.

 

부모 클래스를 파라미터로 사용하는 메소드 등을 사용하기 쉽다. (다형성의 이점!)

부모클래스를 자식클래스로 대체하여도 구현가능하며, 메소드 오버라이딩하여 재정의 된 메서드를 사용할 수도 있다.

이렇듯 객체들이 변경되어 들어가도 전체 다른 클래스는 수정이 필요하지 않고 객체간 연결이 끊어지지 않도록 구현이 가능하다. ** 아직 어렵지만 조금은 이해한 듯!

 

Math.max(A,B) => A, B중 최대값을 리턴해줌.

 

추상클래스의 용도

추상 클래스도 반드시 생성자가 있어야함. (자식클래스에서 super로 호출하여 생성하기 때문에)

1. 실체 클래스들의 공통 필드와 메소드 이름을 통일할 목적

2. 실체 클래스를 작성할 때 시간 절약

추상 메소드는 abstract를 붙어있고 메소드 중괄호가 없다. -> 자식 클래스가 반드시 추상메소드를 재정의(오버라이딩)해서 실행내용을 작성해야 컴파일 에러가 일어나지 않는다.

 

<인터페이스 (interface) > 

- 객체의 사용방법을 정의한 타입

- 개발 코드와 객체가 서로 통신하는 접점 역할

형태 : 

public interface ~~ name { 

//상수 

타입 상수명 = 값;

//추상 메소드

타입 메소드명(매개변수, ...);

//디폴트 메소드

default 타입 메소드 (매개변수, ...) { ... }

//정적 메소드

static 타입 메소드명 )매개변수) {...}    }

인터페이스는 구현(implement) 한다고 표현. 상수만 선언 가능 (변수 사용 불가) 추상(abstract) 표현은 빠져야 함.

 

익명구현객체

인터페이스 변수 = new 인터페이스() {    //인터페이스에 선언된 추상 메소드의 실체 메소드 선언   }

딱 한 번만 객체를 선언할 때 사용하면 효율적이다. 

 

클래스다이어그램에서 인터페이스는 <<interface>> 로 표시한다.

인터페이스는 다중 상속이 허용된다. (단, 같은 이름의 필드 명이 두개의 부모 클래스에 있는 경우 어디서 왔는지가 모호하다 라는 에러메시지가 뜬다.)

 

중첩 클래스와 중첩 인터페이스

내부클래스 (Inner Class)

중첩클래스 (Nested Class)

 

먼저 바깥쪽 클래스 인스턴스 생성, 안쪽의 인스턴스 생성, 그 후에 안쪽 인스턴스의 필드 메소드에 접근 가능하다.

 

익명 (Anonymous) 객체

- 이름이 없는 객체

- 단독으로 생성할 수 없고, 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다.

- 필드의 초기값이나 로컬 변수의 초기값, 매개변수의 매개값으로 주로 대입

- UI 이벤트 처리나 스레드 객체를 간편하게 생성할 목적으로 익명 객체가 많이 활용된다.

 

행열을 만들때 이중 for문 구조를 많이 사용한다.

바깥쪽 for문은 행, 안쪽 for문은 열.

 

 


 

 

교재에서 인터페이스 내용 리뷰

UI ( user interface), GUI (graphic user interface) 

 

메소드 (또는 생성자) 오버로딩 (Method Overloading)

- 메소드 또는 생성자의 이름은 같으면 안되지만, 파라미터의 형태 (갯수, 타입, 순서)에 따라 다른 메소드 또는 생성자로 인식 된다. 

메소드 재정의 (Method Override)

- 부모로부터 상속받은 메소드를 자식 클래스에서 자신의 클래스 기능에 맞게 재정의하는 기능. 

- 이 메소드가 호출될 때 원래는 부모의  메소드가 먼저 호출되지만, 메소드 오버라이딩되면 부모의 메소드가 아닌 자식의 메소드가 호출된다.

 

추상 클래스 : 객체를 생성할 수 없는 클래스. 추상클래스를 상속받아서 기능을 이용하고, 확장시키기 위해

인터페이스: 객체 생성할 수 없고 객체 설명문(객체의 사용방법)이라고 볼 수 있다. 함수의 구현을 강제함으로써 구현 객체의 같은 동작을 보장. 상수만 선언 가능.

 - 인터페이스의 경우 익명 구현 객체를 사용할 수 있다. 

 - 다중 구현(implement)가 가능하다. (상속은 다중 상속이 불가능)

 

중첩 클래스 (Nested Class)

 - 인스턴스 내부 클래스 : 클래스 영역에 일반 멤버 변수처럼 정의되는 클래스로 일반 멤버변수처럼 취급된다. 정적필드나 정적메소드는 선언 불가하다. (외부 클래스 객체가 생성되고 내부 클래스 객체가 생성되기 때문!)

1)인스턴스 멤버 클래스,  2)정적 멤버 클래스,  3)로컬 클래스

 

익명 객체 (Anonymous) 

- 이름이 없는 객체, 단독 생성할 수 없고, 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다.

 

이클립스에서 open perspective -> Git -> Clone a Git repository -> url 넣고, user, PW 입력 (Git hub) -> Git local repository 오른쪽 마우스 클릭 -> 

프로젝트 명 오른쪽 버튼 -> Team -> share project -> Repository:에 깃허브 경로 저장 -> 

 

** 깃허브 사용법은 좀 더 익혀봐야할 것 같다.

 

next 는 띄어쓰기까지, nextline은 엔터까지 입력받음

728x90