반응형
Notice
Recent Posts
Recent Comments
Link
NOW OR NEVER
[JAVA] Keyword와 객체 지향 프로그래밍의 다형성 본문
반응형
Keyword
final
클래스의 멤버변수 앞
- 변수이기는 하지만 상수(고정된)처럼 사용하고자 할 때 사용하는 것
- 특정 값 이외의 다른 값을 사용하면 안될 때 사용
- ex) final int b = 10; b라는 변수이기는 하지만 10외에 다른 값을 가지면 오류가 발생하게 만듦
- 상수는 모두 대문자로 만든다. 그래서 final 붙을 경우 변수가 상수 역할을 하므로 대문자로 만들어 주는 것이 좋다.
- final은 어차피 못바꾸는 것이라서 객체마다 따로 메모리를 잡을 필요가 없다. 그래서 final 이면 static으로 만들어서 모든 객체가 같이 사용한다.
- ex) final static String ADDR = "서울시 마포구 서교동";
클래스의 멤버메소드명 앞
- 최종 메소드
- 부모로부터 물려받은 final method는 overriding 할 수 없음
- ex) public final void pro(){}
클래스의 클래스이름 앞
- final class는 상속받을 수 없다. = 자식 클래스가 없다.
- ex) final class Bird{} -> class Plane extends Bird{} 불가
this와 this()
this
- 현재 클래스의 멤버 변수를 가리킨다.
- 메소드나 생성자의 매개변수 이름을 의미있는 이름으로 정해주면 멤버이름과 동일하게 되는 데 이때 멤버 자신을 구별할 목적으로 사용한다.
this()
- 생성자 안에서 다른 생성자를 호출할 때 사용한다.
- 생성자가 중복 정의되어 있을 때 생성자 안에서 또 다른 생성자를 요구할 때 사용한다. 이때 반드시 생성자의 첫 번째 문장에 와야 한다.
super와 super()
- super
- 상속 관계에 있을 때 부모 클래스에 있는 멤버(변수 or 메소드)와 똑같은 이름의 멤버(변수 or 메소드)를 자식 클래스에서 만들면 부모에 있는 동일한 이름의 멤버는 가려지게 된다. 이때 부모의 동일한 이름의 멤버에 접근하기 위해 super 사용.
- 예를 들어 부모 클래스에도 hello() 메소드가 있고 자식 클래스에도 hello() 메소드가 있다면 hello() 호출하면 자식 클래스의 hello()가 동작한다. 부모에 있는 hello() 동작시키려면 super.hello()라고 해야 한다.
- super()
- 상속 관계에 있을 때 부모의 생성자를 요구하고자 할 때에 super() 사용한다. 이때 반드시 첫번째 문장에 와야 한다.
- 자식 생성자에서 맨 첫 번째 문장에 부모의 기본생성자를 요구하는 super()가 생략되어 있다.(쓰지 않아도 자동으로 요구된다.)
- 만약 부모의 기본생성자가 아닌 매개변수를 갖는 생성자를 동작시키고자 한다면 반드시 super(값1, 값2,...)로 명시해야 한다.(부모의 매개변수 개수에 맞도록)
다형성
- 객체에게 시킨 일은 동일하다(객체에게 동일한 메세지를 주었다.) 하지만 객체마다 서로 동작하는 방식이 다르다.
abstract
- 추상메소드
- 미래에 만들어질 자식클래스들이 공통으로 가져야 할 속성들과 동작들을 모아서 미리 부모클래스를 만들 수 있다. 이때 어떠한 동작이 반드시 자식클래스에 있어야 하지만 부모클래스를 만드는 시점에서 그 내용을 구체화 할 수 없다. 이러한 메소드는 메소드의 본체 {}를 구체화 하지 않고 메소드 선언문만 적는다. 이러한 메소드를 추상메소드라 한다.
- 자식이 반드시 해당 메소드를 overriding 해야 한다는 강제성을 부여함
- 자동화 : 마우스 오른쪽- source - Override /Implement Methods
- 메소드 이름 앞에 abstract 키워드 작성
- ex) public abstract void move();
- 추상클래스
- 어떤 클래스가 추상메소드를 하나라도 포함하고 있으면 그 클래스를 추상클래스라 한다.
- 클래스이름 앞에 abstract 키워드 작성
- ex)
public abstract class Animal { public abstract void move(); }
has a, is a
- 자바로 만들어진 소프트웨어 속을 들여다 보면 수많은 클래스들로 구성되어 있다. 그 클래스들은 has a 관계이거나 is a 관계에 있다.
- has a
- ex) A라는 클래스가 있고 B 클래스가 멤버변수로 A클래스의 객체를 갖는다고 하면 B has a A의 관계이다.
- is a
- 상속관계에 있는 클래스를 is a 관계라고 한다.
- is a 관계에 있는 부모클래스의 참조변수는 자식클래스의 객체를 참조할 수 있다.
- 부모 클래스의 참조변수로 자식 클래스의 객체를 생성한 후 오버라이딩한 메소드를 호출하면 자식 클래스의 메소드가 동작한다.
- 부모 클래스의 참조변수로 자식 클래스에 새로 추가된 메소드(오버라이딩한 메소드가 아닌 메소드)는 바로 호출할 수 없다. 자식 클래스로 형변환((B)ob : ob라는 객체를 B라는 클래스로 형변환) 한 후 호출할 수 있다.
- ex) 만약 A라는 클래스를 확장한 C 클래스가 있다면 C is a A의 관계이다. A is a C는 아니다. 즉 문장으로 설명하면 A가 동물이고 C가 사자라고 하면 -> 사자는 동물입니다(o), 동물은 사자입니다(x)
Interface
- ob instanceof B : ob가 B의 자료형이다.
Tips
- Math class method
- Math.PI : pi값
- static method로서 굳이 객체 생성하지 않고 빠르게 쓸 수 있는 메소드들
- Math.pow(제곱할 값, 얼마나 제곱할지) : 제곱해주는 메소드
- toString 자동
- 마우스 오른쪽 - source - generate toString()
- toString 자동으로 만들 때 부모로부터 toString을 물려받고 싶을때 inherited에서 체크하면 된다.
'Back-End > JAVA' 카테고리의 다른 글
[JAVA] 예외 처리 & Collection (0) | 2022.04.08 |
---|---|
[JAVA] 상속성 & 문자열 처리 (0) | 2022.04.07 |
[JAVA] method 호출 방식과 객체 지향 프로그래밍의 상속성 (0) | 2022.04.05 |
[JAVA] 객체 지향 프로그래밍의 은닉성(Encapsulation) (0) | 2022.04.04 |
[JAVA] 식별자 & 주석문 & method (0) | 2022.03.31 |
Comments