[Java][국비교육] Day 15

Ga02·2023년 1월 16일

국비교육

목록 보기
14/82

🔍 인터페이스, Interface

추상메소드상수만 멤버로 가지는 일종의 추상클래스 ➡ 인터페이스는 일반메소드를 멤버로 가질 수 없음

➰ 상수

멤버필드인 상수들은 자동으로 public static final 키워드가 적용됨 👉🏻 인터페이스는 키워드가 필수라서 붙이지 않고 작성해도 알아서 붙은 것으로 인식하지만, 붙여서 작성하는 것이 좋음

  • 선언과 동시에 초기화 필수

➰ 추상메소드

멤버 메소드인 추상메소드들은 자동으로 public abstract 키워드가 적용됨 👉🏻 abstract를 생략해도 추상메소드로 인식하지만 붙여서 작성하는 것이 좋음

➰ 사용목적

  1. 상수들의 모음집
  • public으로 선언되기 때문에 implements만 적용하면 어디서든 사용 가능 👉🏻 유지보수에 좋음
  • 프로그램에서 사용하는 상수들을 따로 관리하기 편해짐
  1. 메소드의 개발가이드
  • 반드시 개발해야하는 메소드를 추가할 수 있음
  • 개발해야하는 메소드의 형식(이름, 매개변수, 리턴 등)을 강제

🔍 상속과 인터페이스

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() {
    
    }
}

🔍 API, Application Programming Interface

프로그램을 개발하기 위해 만들어진 준비된 코드들

  • 응용프로그램이 운영체제(OS)나 기타 시스템과 상호작용을 하기 위해 사용되는 메시지의 형식(메소드, 함수 등)
  • 자바에서는 패키지 단위로 클래스와 인터페이스를 포함하고 있음 ➡ JDK에 포함되어 설치됨

🔍 Random 클래스

의사 난수(pseudorandom number, 가짜 난수)를 생성하는 클래스 ➡ 실제 난수(무작위)가 아니지만 마치 난수인 것처럼 만들어진 것
의사, pseudo : 꾸며진, 지어낸, 비슷하게 흉내낸
난수, random number : 무작위 수

  • 컴퓨터에서 의사 난수를 생성하는 원리
  1. 기초값(seed) 을 복잡한 연산을 통해 결과값을 만듬 ➡ 결과값을 예측하기 힘들게 함
  2. seed가 고정되거나 미리 연산식을 알고 있다면 다음 난수를 예측하기 쉬워짐 ➡ seed를 수시로 변경
** 에포크 타임, Epoch Time( == 유닉스 타임)
1970년 1월 1일 00시 00분 00초를 기준으로 현재까지 흘러간 시간을 정수로 표현
단위는 초, 밀리초
- 첫 seed를 현재 시간으로 적용
- 다음 seed는 이전 난수값으로 적용

🔍 Object 클래스

자바 모든 클래스들의 최상위 부모 클래스
👉🏻 사용자가 직접 정의한 클래스들도 Object클래스를 자동으로 상속받음 ➡ 배열도 자동상속
별도로 extends Object 코드를 작성하지 않음

➰ 재정의 불가능 메소드 ➡ final 키워드

  • notify, notifyAll 작업끝 / wait 작업중 👉🏻 멀티스레딩의 동기화에 사용됨
    • 스레드 - 작업가능한 개수
    • 동기화 - 순서를 지키면서 작업해라
  • getClass 👉🏻 클래스타입의 객체정보를 반환

➰ 재정의 가능 메소드

  • toString ➡ 거의 항상 오버라이딩
    객체(생성될 인스턴스)를 설명하는 문자열을 반환하는 메소드 👉🏻 "데이터타입@참조값"을 반환

    • 주로 재정의하여 객체의 멤버필드값들을 출력하도록 함 (자동생성 단축키 alt + shift + s, s)
    • System.out.println(객체); 메소드를 호출하면 객체의 .toString() 반환값을 출력
  • equals ➡ 필요할 때마다(꽤나 자주)
    기본 코드는 동일성을 비교하도록 되어있지만 동등성 비교가 필요할 때 재정의 하여 사용

    • 동일성(identity) - 같은 객체인가, 같은 참조값을 가지는가
    • 동등성(equality) - 같은 데이터를 가지는가

💡 String클래스에는 equals()가 동등성 비교로 재정의되어있음

  • hashCode ➡ 아주 가끔
    객체의 고유한 값을 반환하는 메소드 👉🏻 객체의 참조값(메모리 주소)을 10진수로 반환

💡 String 클래스는 문자열 데이터를 특별 연산한 결과를 반환 ➡ 동등한 문자열이라면 같은 hashCode값 반환

  • clone ➡ 거의 안씀
    객체를 복사하여 반환하는 메소드 👉🏻 깊은 복사된 인스턴스의 참조값을 반환

    • Object 클래스에 protected 접근제한자로 설정되어 있으며, 반환타입이 Object라서 복사하는 클래스로 형변환하여 사용
    • 예외처리 구문(try-catch)이 필요 ➡ (CloneNotSupportedException)
    • clone()메소드를 오버라이딩하는 클래스는 interface Clonable상속해야함
  • finalize ➡ 아예 안씀
    객체(인스턴스)가 소멸될 때 호출되는 메소드 👉🏻 GC(Garbege Collector)가 객체를 파괴할 때 호출됨 / 소멸자 ◀▶ 생성자 new

    • 사용한 동적할당(new) 메모리를 반환할 때 사용되지만 자바에서는 GC가 알아서 하기때문에 필요없음
    • 재정의하지 말 것! 사용도 하지 말 것! 👉🏻 JDK9버전부터 @Deprecate 되어있음
profile
IT꿈나무 댓츠미

0개의 댓글