[F-Lab 66해빗 페이백 챌린지 ]

[F-Lab 모각코 페이백 13일차] 에러의 종류, 내부 클래스, 익명 클래스,프로퍼티 클래스

everydeveloper 2023. 5. 26. 18:47

오늘 학습 목표

  • 팀코칭 질문으로 학습
  • 자바의 신 23Chapter
  • 최범균의 jsp 2.3 Chapter 1-3 
    • 웹 프로그래밍 기초
    • JSP로 시작하는 웹 프로그래밍

 

TIL

  • 에러의 종류
    • 구문 오류(Syntax Error)= 문법 오류
    • 실행 오류(Runtime Error)
    • 논리 오류 (Semantic Error / Logical Error)
  • 내부 클래스
  • 익명 클래스
  • 프로퍼티 클래스
  • 상수 풀(Constant Pool)

 

 

에러의 종류

크게 3가지가 있다.

  • 구문 오류(Syntax Error)= 문법 오류
  • 실행 오류(Runtime Error)
  • 논리 오류 (Semantic Error / Logical Error)

 

구문 오류

 

컴퓨터 과학 분야에서 특정한 프로그래밍 언어에서 쓰이도록 고안된 일련의 문자열이나 문자 블록의 구문 속의 오류를 가리킨다.

실행 오류

  1. Null Reference Error: 이는 객체를 참조하려 할 때, 해당 객체가 초기화되지 않았거나 존재하지 않는 경우 발생합니다.
  2. Array Index Out of Bounds: 배열의 크기를 벗어나는 인덱스에 접근하려 할 때 발생합니다. 예를 들어, 5개의 요소를 가진 배열에서 6번째 요소에 접근하려는 경우입니다.
  3. Division by Zero: 0으로 나누려고 할 때 발생하는 에러입니다. 대부분의 프로그래밍 언어에서는 0으로 나누는 것을 허용하지 않습니다.
  4. Type Casting Error: 잘못된 타입으로 변환하려 할 때 발생합니다. 예를 들어, 문자열을 정수로 변환하려고 하지만 문자열이 숫자 형식이 아닌 경우 발생할 수 있습니다.
  5. Out of Memory Error: 프로그램이 시스템에서 사용 가능한 메모리를 모두 사용한 경우 발생합니다.
  6. File Not Found Error: 존재하지 않는 파일을 열려고 할 때 발생하는 에러입니다.

논리 오류

논리 오류는 개발자의 실수라고 볼 수 있다.

1+2=3 이라고 3이 나와야 하는 결과를

1-2를 해서 -1이 나오는 경우도 논리 오류라고 한다.

 

에러 예시

문법에러, 타입에러

예외 처리 예시

 

  1. try-catch-finally: try 블록 내에는 예외가 발생할 수 있는 코드가 위치합니다. catch 블록은 특정 예외 혹은 예외의 유형이 발생할 때 실행되는 코드를 포함하며, 여러 개의 catch 블록을 사용하여 다양한 유형의 예외를 처리할 수 있습니다. finally 블록은 try와 catch 블록 후에 항상 실행되는 코드를 포함합니다. 이는 자원 해제와 같은 후처리 작업에 주로 사용됩니다.
  2. throws: throws 키워드는 메소드 또는 생성자가 처리하지 않고 호출한 곳으로 예외를 전달하도록 할 때 사용됩니다. 이는 해당 메소드가 지정된 예외를 발생시킬 수 있다는 것을 명시적으로 선언하는 역할을 합니다.
  3. throw: throw 키워드는 프로그램에서 명시적으로 예외를 발생시킬 때 사용됩니다. 이를 통해 개발자는 특정 조건에서 예외를 발생시킬 수 있습니다.

 

내부 클래스

내부클래스는 한 클래스 내부에 선언된 클래스이다.

어차피 두 클래스 간의 관계가 필요하다면 바로 내부에 선언해서 쓰는 것도 나쁘지 않다.

그리고 한단계 내부로 들어가기 때문에 캡슐성이 증가된다.

 

익명 클래스

내부 클래스에서 클래스명을 생략한 것이다.

익명성을 사용하기 때문에 선언과 동시에 사용을 하고 객체로 만들어지지 않기 때문에

다른 곳에서 호출이 불가능하다. 

한번만 사용된다.

 

메모리에서 static 클래스는 어디에서 생성되나요?

메소드 영역입니다. static 클래스는 클래스 내부에 static으로 선언된 클래스를 말하며 내부에 있더라도 독립적인 하나의 클래스로 동작합니다. 하지만 내부에 선언되어 있기 때문에 해당 외부 클래스의 private 멤버에 접근 할 수 없는 등 명확한 관계는 유지합니다.

Inner Class와 익명 클래스에 대하여 설명해주세요.

클래스 내부에 선언되어 있는 클래스를 내부 클래스라고 하고,내부 클래스에서 클래스 명이 없는 것을 익명 클래스라고 한다. 익명 클래스는 생성하고 바로 쓰이기 떄문에 객체로 생성이 안된다. 내부 클래스는 한 클래스의 내부에 선언되기 때문에 관계성과 캡슐성이 증가된다.

Constant Pool을 사용함으로써 얻는 이점은 무엇이 있을까요?

상수 풀은 클래스 파일과 메모리 둘다 존재합니다. 재사용성,보안,성능 향상,심볼릭 참조의 해결. 따라서, 상수 풀은 자바 언어의 메모리 효율성, 보안, 성능 향상, 그리고 유연성에 중요한 역할을 하게 됩니다.

 

에러 종류 (ex. error, exception), 예시를 들어 설명해주세요.

에러는
구문 오류, 런타임 오류, 논리 오류 크게 3가지가 있습니다.

예외는 크게 2가지가 있습니다.
체크 예외, 언체크 예외가 있습니다.
체크 예외는 컴파일 에러를 예외처리하는 것이고 언체크드 예외는 런타임 에러는 예외처리하는 것입니다.

에러 예시는 문법에러, 타입에러가 있습니다.
예외 처리 예시는 try-catch-finaly, throw, throws절 등이 있습니다.

 

컴파일 에러, 런타임 에러 중 어떤 에러가 더 좋은 에러일까요?

 ,ㅏ컴파일 에러는 컴파일 시에 발생하는 에러이고, 런타임 에러는 런타임 시에 발생하는 에러입니다. 컴파일 에러는 프로그램 동작 전에 발견할 수 있어서 상대적으로 위험도가 낮은 것 같습니다. 더 좋은 에러라고 말하기는 어렵지만 둘 중 선택하라고 하면 저는 컴파일 에러를 선택할 것 같습니다.

 

프로퍼티 클래스(Properties 클래스)

 

Java의 Properties 클래스는 Hashtable을 확장한 클래스로, 키와 값의 형태로 데이터를 저장하는데 사용되며, 주로 어플리케이션의 설정 정보를 파일로부터 읽어 들이거나 파일로 출력하는 데 사용됩니다.

Properties 클래스는 키와 값이 모두 String 형태이며, 이로 인해 텍스트 데이터를 다루기가 편리합니다. 일반적으로 .properties 확장자를 가진 파일에 데이터를 저장하며, 이 파일에는 각 줄에 키=값 또는 키:값 형태로 데이터가 기록됩니다.

다음은 Properties 클래스를 사용하는 예시입니다:

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) {
        Properties props = new Properties();
        try {
            FileInputStream fis = new FileInputStream("app.properties");
            props.load(fis);
        } catch(IOException e) {
            e.printStackTrace();
        }
        
        String username = props.getProperty("username");
        String password = props.getProperty("password");
        
        System.out.println("Username: " + username);
        System.out.println("Password: " + password);
    }
}

위의 예시에서 app.properties 파일에는 다음과 같은 내용이 있다고 가정해 보겠습니다:

 

username=admin
password=secret

이 경우 Properties 객체는 이 파일을 로드하고, getProperty 메소드를 통해 각 키에 해당하는 값을 가져옵니다. 이렇게 하면 설정 정보를 쉽게 관리하고 변경할 수 있습니다. 이런 방식은 데이터베이스 연결 정보, 애플리케이션 설정 등을 관리하는 데 흔히 사용됩니다.