추상메소드와 상수만 멤버로 가지는 일종의 추상클래스 ➡ 인터페이스는 일반메소드를 멤버로 가질 수 없음
멤버필드인 상수들은 자동으로 public static final 키워드가 적용됨 👉🏻 인터페이스는 키워드가 필수라서 붙이지 않고 작성해도 알아서 붙은 것으로 인식하지만, 붙여서 작성하는 것이 좋음
멤버 메소드인 추상메소드들은 자동으로 public abstract 키워드가 적용됨 👉🏻 abstract를 생략해도 추상메소드로 인식하지만 붙여서 작성하는 것이 좋음
public class Parent {
public void out() {
System.out.println("부모클래스");
}
}
-------------------------------------------
public interface Inter_01 {
public abstract void out();
}
-------------------------------------------
public interface Inter_02 {
public abstract void out();
}
-------------------------------------------
public class Child extends Parent implements Inter_01, Inter_02 {
@override
public void out() {
System.out.println("자식 클래스");
} 👉🏻 클래스상속 메소드의 오버라이드라고 해도 인터페이스타입 변수 선언 및 자식객체 생성 후 메소드 호출시 동적바인딩 정상 작동
}
-------------------------------------------
Inter_01 i01 = new Child();
i01.out();
➡ 자식 클래스
extends 키워드로 하나의 클래스만 상속받을 수 있음public class P1 {
public void display() {
System.println("P1");
}
}
--------------------------------
public class P2 {
public void display() {
System.println("P2");
}
}
--------------------------------
public class Child extends P1, P2 {
@override
public void display() {
//P1, P2 부모클래스 중 어떤 메소드를 상속받아야할지 결정할 수 없음 ➡ 구현부 충돌
}
extends 키워드 사용interface InterA {
public abstract void getA();
}
--------------------------------------
interface InterB {
public abstract void getB();
}
--------------------------------------
interface InterC extends InterA, InterB {
public abstract void getC();
}
👉🏻 getC() 메소드만 호출해도 getA, getB도 같이 호출
--------------------------------------
class Children implements InterC {
@override
public void getA() {
}
@override
public void getB() {
}
@override
public void getC() {
}
}
프로그램을 개발하기 위해 만들어진 준비된 코드들
의사 난수(pseudorandom number, 가짜 난수)를 생성하는 클래스 ➡ 실제 난수(무작위)가 아니지만 마치 난수인 것처럼 만들어진 것
의사, pseudo : 꾸며진, 지어낸, 비슷하게 흉내낸
난수, random number : 무작위 수
** 에포크 타임, Epoch Time( == 유닉스 타임)
1970년 1월 1일 00시 00분 00초를 기준으로 현재까지 흘러간 시간을 정수로 표현
단위는 초, 밀리초
- 첫 seed를 현재 시간으로 적용
- 다음 seed는 이전 난수값으로 적용
자바 모든 클래스들의 최상위 부모 클래스
👉🏻 사용자가 직접 정의한 클래스들도 Object클래스를 자동으로 상속받음 ➡ 배열도 자동상속
별도로 extends Object 코드를 작성하지 않음
notify, notifyAll 작업끝 / wait 작업중 👉🏻 멀티스레딩의 동기화에 사용됨getClass 👉🏻 클래스타입의 객체정보를 반환toString ➡ 거의 항상 오버라이딩
객체(생성될 인스턴스)를 설명하는 문자열을 반환하는 메소드 👉🏻 "데이터타입@참조값"을 반환
System.out.println(객체); 메소드를 호출하면 객체의 .toString() 반환값을 출력equals ➡ 필요할 때마다(꽤나 자주)
기본 코드는 동일성을 비교하도록 되어있지만 동등성 비교가 필요할 때 재정의 하여 사용
동일성(identity) - 같은 객체인가, 같은 참조값을 가지는가동등성(equality) - 같은 데이터를 가지는가💡 String클래스에는 equals()가 동등성 비교로 재정의되어있음
hashCode ➡ 아주 가끔💡 String 클래스는 문자열 데이터를 특별 연산한 결과를 반환 ➡ 동등한 문자열이라면 같은 hashCode값 반환
clone ➡ 거의 안씀
객체를 복사하여 반환하는 메소드 👉🏻 깊은 복사된 인스턴스의 참조값을 반환
interface Clonable을 상속해야함finalize ➡ 아예 안씀
객체(인스턴스)가 소멸될 때 호출되는 메소드 👉🏻 GC(Garbege Collector)가 객체를 파괴할 때 호출됨 / 소멸자 ◀▶ 생성자 new