반응형
Notice
Recent Posts
Recent Comments
Link
NOW OR NEVER
[JAVA] 상속과 다형성 본문
반응형
Package
- 패키지 필요성
- 개발자 입장 : 자바 파일들을 폴더 별로 나눠서 관리하기 위함
- JVM 입장 : 패키지로 나눠져 있던 것들을 가져오기 쉽게하기 위함
- 패키지 이름 생성 규칙
- 영어 소문자로 입력
- 중복되지 않은 이름을 쓰기 위해 도메인(주소 http 뒤 주소를 씀)
- 하나의 자바 파일에 여러 클래스를 만드나 자바 파일 당 하나의 클래스 파일만 만들었을 때나 다 별개의 클래스 파일로 컴파일 되기 때문에 편한 방식으로 클래스를 생성하면 된다.
- 다른 패키지 내 파일 사용 시 패키지 주소만 임포트 해주면 클래스이름으로 접근 가능
- 출력시 패키지 이름이 다른 것은 패키지 이름도 같이 나온다.
- * 사용 시 패키지 내 모든 클래스 사용 가능하나 패키지 내 모든 클래스가 메모리에 올라간다. 사용하지 않는 클래스가 메모리에 올라가기 때문에 CPU에 영향이 갈 수 있다. 또한 코드 작성 시 불편할 수 있다.
- 다른 패키지여도 클래스 이름은 다르게 하는 것이 좋다 : 패키지가 다르다 해서 클래스 이름을 동일하게 쓰면 불편해지므로 그런 것은 하지 않는 것이 좋다. import된 다른 패키지의 클래스와 동일한 이름의 클래스 사용 시 앞에 패키지 명을 반드시 붙여줘야 한다.
배열
- 이름을 부여주면 그 이름을 다 부르는 건 어려우니 배열이란 걸 만들 게 됨
- 자바에서는 배열도 객체이다.
- 첫번째 기억장소의 값과 각 기억장소의 크기를 알고있다.
- 의미가 같은 것끼리 배열로 묶어주는 것을 권장한다.
생성자
- 클래스를 가지고 객체를 만들어야 하는 데 클래스에 있는 생성자가 매개변수 두개를 가지고 있다면 값 두개를 무조건 전달해야 객체를 생성할 수 있다.
- 값을 결정해야 할 경우에 생성자의 매개변수로 받으면 된다.
- public 클래스이름(매개변수){}
- this()
- 생성자에서 다른 생성자 호출 시 사용(이런 경우가 많다)
- 자바 문법 상 생성자 내에서 반드시 첫 번째 코드여야 한다.
Overloading
- 메서드나 생성자를 작성할 때 매개변수의 형태를 다르게 하여 같은 이름으로 여러 개를 만들 수 있도록 하는 개념
- 사용자의 입장에서 매개변수가 다른 것 때문에 메소드 이름이 다 다르면 불편하므로 메소드 이름을 같게 하고 매개변수 형태만 다르게 하면 메소드이름이 같아도 매개변수 형태와 수에 맞는 메소드를 찾아 사용할 수 있기에 사용하기 좋다.
- 가변형 매개변수 이용 : 타입이 같은 여러 배열을 받을 때 사용하면 유용하다
상속
- 다른 클래스가 가지고 있는 부분을 포함시켜서 만드는 개념
- 자바의 경우 단일 상속 지원 : 하나의 자식 클래스는 하나의 부모 클래스만 가질 수 있다. C++의 경우 여러 부모 클래스 가질 수 있음
- 하나의 부모(super) 클래스는 여러 자식(sub) 클래스를 가질 수 있다.
- 부모 클래스가 자식 클래스에 있는 것에 접근 불가능 : 미래에 만들어 질 자식 클래스에 지칭할 수가 없기 때문(접근 할 수 없기 때문)
- 자식 클래스는 부모 클래스에 있는 것에 접근 가능 : 자식 클래스가 상속 받기 전에 이미 부모 클래스가 존재하기에 상속 받겠다고 지칭할 수 있는 것(접근 할 수 있는 것)
- 부모 클래스에 매개변수가 없는 생성자가 없을 수도 있다. 이 경우 명시해줘야 한다.
다형성 Polymophism
- 다형성 의미 : 하나의 객체가 여러가지다
- 객체는 클래스로 만드는 데 그 객체를 여러 형태로 담을 수 있다는 말과 같다.
- 생성된 객체의 ID를 부모 클래스형 변수에 담는 것은 가능하다. :
- 부모클래스 객체에 자식클래스 타입의 객체를 넣어도 부모클래스 값이 출력된다.
- Overriding : 부모가 가지고 있는 메서드를 자식이 다시 그 메서드를 재현하는 것, 부모 클래스 안 메서드 이름 = 자식 클래스 안 메서드 이름
- 부모 클래스 a = new 자식 클래스() 일 때 동일한 메서드가 존재할 때 --> a.동일메서드 실행 시 자식에 있는 메서드가 호출됨
- 부모클래스의 메서드를 자식에서 다시 구현한 경우 부모클래스형 참조변수를 가지고 호출를 하게 되면 자식 메서드가 호출됨
- 부모클래스형 참조변수를 가지고 자식 메서드를 호출 할 수 있다
- 어떠한 버튼이 있는 데 이러한 기능을 하게 만들고 싶어라고 개발하게 되면 사용자가 버튼을 눌렀을 때 동작 : 즉 개발자가 실행하는 시점을 예측할 수 없다, 사용자가 버튼 누를 때 JVM이 그 기능을 호출 : 어떠한 사건이 발생했을 때 과거(JVM 만들어짐)와 미래가 존재, 미래에 만들어지는 클래스 이름, 메서드들을 JVM이 정의할 수가 없으니까 그래서 사건 발생 시 JVM이 이미 정해놓은 것을 실행
- 자식에 동일 클래스 없을 시 부모 메서드 실행
ETC
- 메서드는 하나의 기능 당 하나 생성
- 프로젝트 설계 : 어떤 기능이 필요한 지 정의 -> 기능을 구현하기 위한 데이터 필요한 지 정의(어떤 클래스에 포함시키는 지) - 클래스이름, 변수 이름, 메서드 이름 정의
- 문제 분석 - 기능 정리 - 기능 구현 위한 필요한 변수 설정 - 클래스 설계(주석) - 클래스 내부의 변수와 메서드 정의
- main에서는 클래스들이 가지고 있는 메서드만 호출하게 하고 주요 기능들은 클래스에 들어가게 한다.
- 자바에서는 메모리를 알아서 관리해주기 때문에 소멸자가 필요없지만 C++ 같은 언어들은 개발자가 직접 소멸자를 사용하여 메모리를 관리해야 한다.
- scanner.close() : release의 개념이 아니라
'Back-End > JAVA' 카테고리의 다른 글
[JAVA] Class와 InterFace (0) | 2023.05.04 |
---|---|
[JAVA] 오버라이딩과 접근제한자 & 캡슐화 (0) | 2023.05.03 |
[JAVA] 자바 클래스 & 메서드 (0) | 2023.04.28 |
[JAVA] 제어 문 (0) | 2023.04.28 |
[JAVA] 변수, 자료형 관련 (0) | 2023.04.27 |
Comments