(JAVA) 자바 프로그래밍 교육 5일차

#0317_Java_Programming_Education_Day 5

상호 작용

interface Interface{}
Class implements Interface {}

구현하지 않고 선언만으로 구성된 추상 메소드필드가 없는 집합입니다. (대신 상수를 정의할 수 있음)

상속받은 자식은 부모에서 선언한 메서드를 무조건 구현합니다.해야한다. 클래스는 개체를 만들기 위한 완벽한 청사진이며 구멍이 없어야 합니다.

  • 추상 메서드

인터페이스 메서드의 경우 키워드 abstract 및 액세스 식별자 public이 항상 추가되며 생략할 수 있습니다. 구현 부분이 존재하지 않으며 상속된 자식에 의해 구현됩니다.

(public abstract) 리턴타입 메서드명 ((인자..));
  • 상수(* 필드 없음)
(public static final) 변수명 = 값;

인터페이스는 개체 생성의 대상이 될 수 없습니다.. 클래스에 Abstract가 하나라도 있으면 객체 생성이 불가능합니다. 개체를 생성할 때 유형으로만 정의할 수 있습니다.

interface Parent {};
Child implements Parent{};
Parent p = new Parent(); // (X) Parent cannot be resolrved to a type, 객체 생성 안됨
Parent c = new Child(); // (O) Polymorphism 부모 타입으로 자식 생성이 가능

부모 유형으로 자식 개체를 생성할 수 있지만 자식 개체 고유의 메서드나 필드를 사용하려면 개체를 자식 유형으로 캐스팅해야 합니다.

상속받은 부모 클래스의 모든 메서드를 재정의하지 않으면 추상 클래스가 됩니다. 추상 클래스는 메모리에 로드할 수 없습니다. 즉, 개체를 만들 수 없습니다.

** 클래스가 객체 생성을 위한 청사진인 경우 인터페이스는 청사진 템플릿입니다.오전. 자신이 속한 메소드를 무조건 구현하도록 되어 있습니다. 추상 클래스는 완벽한 청사진이 아닙니다(클래스).오전.

수집 API 여러 데이터(객체 기반)를 저장하는 방법입니다.

  • 공공의 상호 작용 문장 확장 컬렉션
    순서가 없으며(인덱스 없음) 중복을 허용하지 않습니다. 일반적으로 사용되는 구현은 HashSet입니다.
  • 공용 인터페이스 목록 확장 컬렉션
    시작점과 끝점이 있는 값을 저장합니다. 괜찮으니 인덱스로 접근이 가능하고 중복 데이터 저장도 가능하다.
    ArrayList, Vecotr, LinkedList 등이 있습니다. ArrayList가 가장 일반적으로 사용됩니다.
  • 수업 지도 직렬화 가능 구현
    Collection 인터페이스에 해당하지 않습니다.
    값은 다음과 같은 형식입니다. 저장되었습니다. 여기서 키 복제는 허용되지 않지만 값 복제는 허용됩니다. 인덱스를 통한 액세스는 불가능합니다.
    HashMap, HashTable 및 Properties가 있습니다. 현재 HashTable은 사용하지 않지만 HashTable에서 상속받은 속성을 많이 사용한다. 키와 값 모두 문자열 유형에 저장할 수 있습니다.

** 때때로 혼란스러운 지도 순회 방법

Map<String, Object> map = new HashMap<String, Object>();

Set<String> keySet = map.keySet();
   for(String key: keySet) {
      map.get(key);
}
** VM Java 관련 인쇄 환경 변수
Properties p = System.getProperties();
Enumeration<?> e= p.propertyNames();
while(e.hasMoreElements()) {
   String key = (String)e.nextElement();
   System.out.println(key+": "+p.getProperty(key));
}

오류 및 예외 정의
  • 오류 : 심각한 피해, 개발자 공간에서 고칠 수 있는 문제가 아니라 시스템 종료가 필요할 정도로 심각한 문제.
  • 예외 : 경미한 손상, 개발자가 예측하고 예방할 수 있는 오류이므로 예외 처리가 런타임에 문제를 일으키지 않아야 합니다.

예외가 발생한 시기에 따라 두 가지 유형의 오류가 있습니다.

  • 런타임 오류: 코드를 변경하여 수정할 수 있습니다. 컴파일은 컴파일러가 인식하지 못하기 때문에 성공하지만 런타임에 발생합니다.
  • 컴파일 오류: 예외를 처리하고 작성하는 것이 필수적입니다.

임의 예외 처리 프로그램이 비정상적으로 종료되는 것을 방지하기 위한 프로세스하는 것이 가장 중요하다

사용자는 예외 개체 및 예외 처리 구문을 사용하여 특정 조건에서 의도적으로 예외를 throw할 수 있습니다. 어떻게든 강력한 제어 명령오전.

try{
   // 예외 발생 가능성 있는 코드
   // 예외 발생 시 다음 줄 실행 안하고 바로 catch 구문으로 이동
} catch(Exception e){
   예외 발생 시 수행하고자 하는 코드
   if(e instanceof ArrayIndexOutOfBoundsException) 
      // instanceof 이용하여 예외 객체 종류에 따라 처리 가능
}
  • 예외 이것은 예외가 발생했을 때 JVM이 반환하는 개체입니다.
  • 트라이 캐치 예외 생성 코드를 정의합니다.
  • 던진다 메서드 내에서 예외가 발생했음을 나타냅니다.


https://velog.io/@kdhyo/Java%EC%98%88%EC%99%B8Exception%EA%B4%80%EB%A0%A8-%EC%A0%95%EB%A6%AC

* 메서드 내에서 예외 처리를 수행하면 안 됩니다. throws Exception으로 예외를 던진 후 메서드를 호출(수신)한 페이지에서 예외를 처리해야 합니다..

– 메소드 내부에서 Exception 처리가 필요한 부분에서 Exception을 던지고 빠져나간다.

– 예외를 던지는 메서드를 호출하는 부분을 try 문에 넣고, 예외가 발생하면 catch 문이 예외를 처리한다.

예 – UserExam 클래스

class UserExam{
   public void go() throws UserException {

      System.out.println("=== go() 메서드 진입 ===");
      int i=10;
      int j=0;
      if(j==0) {
         // 필요한 부분에서 고의로 예외를 발생시킴
         System.out.println("분모가 0이 되면 안됨");
         throw new ArithmeticException();
      }
      System.out.println("=== go() 메서드 종료 ===");
   }
}

– 실행 클래스

public class UserExceptionTest {

   public static void main(String() args) {
      System.out.println("=== 프로그램 시작 ===");

      UserExam ex = new UserExam();
      System.out.println("=== UserExam 객체 생성 ===");
      
      try {
         ex.go();
      } catch(Exception e) {
         // 이 부분에서 예외에 대한 핸들링 필요
         System.out.println("=== 예외 발생 ===");
      }
      
      System.out.println("=== 프로그램 종료 ===");
   }
}

실행 결과

=== 프로그램 시작 ===
=== UserExam 객체 생성 ===

=== 예외 발생 ===
분모가 0이되면 안됨

=== 프로그램 종료 ===

사용자가 생성한 예외를 사용하는 예 – Custom Exception

class UserException extends Exception{
   UserException(){
      this("This is an UserException"); // 다른 생성자 호출 UserException(String message)
   }
   UserException(String message){ 
      super(message); // Exception(String message)
   }

   @Override
   public String getMessage() {
      return super.getMessage() + " 분모가 0이 되면 안됨";
   }
}