본문 바로가기

JAVA

Java_3강

  메소드(Method)

메소드(함수)란 한 가지 목적을 처리하기 위한 명령어 묶음을 의미한다.

결과값(반환값)이 하나이거나 없으며 함수가 객체 내부에서 작성되었을 때 메소드(Method)라고 불린다.

 

유형)

  • 파라미터, 반환값 모두 존재
  • 파라미터만 존재
  • 반환값만 존재
  • 파라미터, 반환값 모두 없음

이는 JS에서 함수 파트를 배웠을 때와 동일한 형식을 가진다.

 

문법)

     [반환값의 자료형(반환형)] [메소드 이름(파라미터 목록)] { 명령어 }

 

* 가장 기본적인 함수(public static void main(String[] args){ ... }의 의미

   - 자바 프로그램의 실행 시작 메소드

   - public : 접근 제어자 <-> private

   - static : 인스턴스 생성 없이 사용 가능

   - void : 반환값이 '없다'라는 의미 => return 사용 안 함

   - main : 고정된 이름

   - String[] args : 프로그램 시작 시 옵션값 저장 배열

 

1. 메소드 기본 예제

public class MethodTest {

    // 인스턴스 멤버 변수
    static int a; // static 멤버 변수(class 변수)
    float b;
    String c;

    public static void main(String[] args) {
        a = 10000;
        method1();
    } // main end

    // static이 붙은 멤버(변수, 메소드)는 static이 붙은 멤버만 사용할 수 있음

    // void를 사용하는 메소드 작성
    static void method1() {
        System.out.println("return 없는 메소드 실행");
        add(); // 메소드 호출 -> 메소드는 메소드 안에서 호출 가능
    }

    static int add() {
        System.out.println("return 있는 메소드 실행");
        return 0;
    }

} // class end

 

2. Self Instance 예제 - main 안에서 자기 자신을 인스턴스

public class SelfInstanceClass {
    int a;
    float b;
    String c;

    public static void main(String[] args) {
        SelfInstanceClass sfc = new SelfInstanceClass();
        sfc.a = 100;
        sfc.b = 50.0f;
        sfc.c = "1000";
        sfc.add();
    }

    void add() {
        System.out.println(a + b + c);
    }
}

  변수 용어

  • 멤버 변수 : 클래스 내부, 메소드 외부에 작성하는 변수
  • 인스턴스 (멤버)변수 : 멤버 변수이며, static이 붙지 않은 변수
  • 스태틱 (멤버)변수 : 멤버 변수이며, static이 붙은 변수
  • 클래스 변수 : 스태틱 변수와 같은 말
  • 지역 변수 : 메소드 내부에 작성하고, 내부에서만 사용할 수 있는 변수
  • 매개 변수 : 파라미터를 받기 위해 메소드명 다음 '()' 사이에 작성하는 변수 => 지역 변수와 동일
  • 필드 : 멤버 변수 중 인스턴스 변수를 지칭하는 다른 말
  • 인스턴스 참조 변수 : 멤버 변수 또는 지역 변수이며, 인스턴스의 위치값을 저장하는 변수 => class명 변수 = new class명();

  예외 처리(Excepiton Handling)

Error(오류)

- 컴파일 오류(Compile Error) : 문법 오류(오타일 확률 높음)

- 실행 오류(Runtime Error) : 사용자의 오작동 -> 예외 => 프로그램이 비정상적으로 종료됨

 

즉, 예외 처리란 개발자가 실행 오류를 예측하여 해당 오류 발생 시 조취할 수 잇는 코드를 미리 작성하는 것을 말한다. 다시 말해 비정상적인 종료를 막는 것이다.

 

이때 사용해주는 것이 try catch 구문이다.

try : 범위 안에 예외사항이 발생할 수 있는 코드를 작성

catch : try  코드에서 발생한 예외를 조취하기 위한 코드를 작성

finally : 예외와 상관없이 실행해야 하는 코드를 작성 => 생략 가능

 

주요 예외사항)

  • 숫자가 아닌 문자열을 숫자로 변환하려는 경우 => NumberFormatExcepiton
  • 정수를 0으로 나누는 경우 => ArithmeticException
  • 객체(인스턴스)가 존재하지 않는데 사용하려는 경우 => NullPointException
  • 존재하지 않는 파일을 열려고 하는 경우 => IOException
  • 배열에서 배열 크기보다 큰 순번으로 값을 읽으려는 경우
  • 네트워크 관련 처리
  • 데이터베이스 관련 처리

기본적으로 catch()에는 위 예외사항의 객체를 지정해야 한다. 또한 모든 예외에 대해서 지정할 수 있는 Exception 하나로 모든 예외사항을 처리할 수 있다. 만약 2가지 이상의 예외사항이 발생한다면 catch()를 여러 번 작성하면 된다.

 

메소드에서 예외 선언)

throw : 메소드에서 발생한 예외사항을 호출한 메소드로 전달

반환형 메소드명(매개변수 throws 예외사항1, 예외사항2, ... { } => 매개변수 목록 옆에 작성

 

1. 일반 예외사항 처리 예제

import java.util.Scanner;

public class ExceptionHandling {
    public static void main(String[] args) {
        Scanner scan = new Scanner((System.in));
        String s = null;
        int n1 = 0, n2 = 0, result = 0;

        try {
            System.out.println("Number1 : ");
            s = scan.nextLine();
            n1 = Integer.parseInt(s);
            System.out.println("Number2 : ");
            s = scan.nextLine();
            n2 = Integer.parseInt(s);

            result = n1 / n2;
        }catch (NumberFormatException nfe) {
            System.out.println("예외사항이 발생했습니다.");
        }catch (ArithmeticException ae) {
            System.out.println("0으로 나눌 수 없습니다.");
        }catch (Exception e) {
            System.out.println("예외사항이 발생했습니다.");
        }finally {
            System.out.println("이 문장은 항상 나옵니다.");
        }

        System.out.println(result);
    }
}

2. 메소드에서 예외 선언 예제

import java.util.InputMismatchException;
import java.util.Scanner;

public class ExceptionHandling2 {
    public static void main(String[] args) {
    
        Scanner scan = new Scanner(System.in);
        int n1 = 0, n2 = 0, result = 0;
        
        try{
            System.out.print("N1 : ");
            n1 = scan.nextInt();
            
            System.out.print("N2 : ");
            n2 = scan.nextInt();

            result = div(n1, n2);
        } catch (InputMismatchException ie){
            System.out.println("입력 미스!");
            return;
        } catch (ArithmeticException ae){
            System.out.println("0으로 나눌 수 없습니다.");
            return;
        }

        System.out.println("나눗셈 결과 : " + result);
    }

    // 메소드 내 예외사항 처리
    static int div(int n1, int n2) throws ArithmeticException{
        int result = 0;
        result = n1 / n2;

        return result;
    }
}

'JAVA' 카테고리의 다른 글

Java_5강(MVC 패턴 예제)  (0) 2022.09.20
Java_4강  (0) 2022.09.19
Java_2강  (0) 2022.09.18
Java_1강  (0) 2022.09.16
Java_0강(Java 및 IntelliJ 설치)  (0) 2022.09.14