Chapter 3 - Java

이호준·2022년 9월 10일
0

fastcampus

목록 보기
6/6

1. 오버로딩(overloading)

  • 한 클래스 안에 같은 이름의 메서드 여러 개 정의 하는 것
  • 오버로딩(Overloading)이라는 뜻은 사전적으로 '과적하다.'라는 뜻이다. C언어에서는 함수명이 고유하게 존재해야 한다. 즉 하나의 함수가 하나의 기능만을 구현해야 한다는 것이다. 하지만 자바에서는 하나의 메소드 이름으로 여러 기능을 구현하기 때문에 '과적하다.'라는 뜻의 이름을 붙여준 것으로 보인다.

오버로딩이 성립하기 위한 조건

  • 메서드 이름이 같아야 한다.
  • 매개변수의 개수 또는 타입이 달라야한다.
  • 반환 타입은 영향없다.
int add(int a, int b) { return a+b;}
int add(int x, int y) { return x+y;}

-> 오버로딩 x - 중복 정의가 되어있다.

long add(int a, long b) { return a + b; }
long add(long a, int b) { return a + b; }

-> 오버로딩 0 - 조건에 성립 되어있다.

오버로딩을 사용하는 이유

1. 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다.

우리가 흔히 콘솔창에 텍스트를 출력할 때 사용하는 println라는 메소드를 대표적인 예로 들어볼 수 있다. 실은 이 함수가 오버로딩의 결정체이다. 우리는 println의 인자 값으로 int, double, boolean, String 등의 아주 다양한 타입의 매개변수들을 집어넣어도 우리는 그 함수들이 어떻게 실행되지는 모르지만 콘솔창에 아주 잘 출력해주는 것을 볼 수 있다.

이렇게 '출력하다.'라는 같은 기능을 가진 메소드들를 println이라는 하나의 이름으로 정의가 가능한 것이다.

2. 메소드의 이름을 절약할 수 있다.

이 위에서 예로 들었던 println을 생각해보자. 이 메소드를 매개변수의 종류에 따라서 다르게 지정한다고 생각해보자. printlnInt, printlnDouble, printlnBoolean 등 수많은 메소드들의 이름을 정해줘야 할 것이다. 이는 프로그래머의 입장에서는 메소드의 네이밍에 고민을 가중시킨다. 그리고 이런 이름들은 다른 곳에 사용할 가능성도 생기게 된다.

2. 프로그램 오류

  • 컴파일 에러

-> CTRL + ENTER 누르면 자동적으로 고쳐짐.
(구문체크, 번역, 최적화, 생략된 코드 추가)

  • 런타임 에러

2-1. 프로그램 예외처리. (try-catch문)


package test;

public class ExceptionTest {
	public static void main(String[] args) {
		System.out.println(1);
		System.out.println(2);
		
		try {
			System.out.println(3);
			System.out.println(0/0); // 예외발생 --- (1)
			System.out.println(4);
			
		} catch (ArithmeticException e) {
			if(e instanceof ArithmeticException) { 
				System.out.println("true");
			}
			System.out.println("ArithmeticException");
		} catch (Exception e) {
			e.printStackTrace(); -- (2)
			System.out.println("Exception");
		}
		System.out.println(6);
	}
}
  • 결과

-> (2)은 예외처리할 때, 항상 써주는 것이 필수!! ( 예외발생 당시의 호출스텍(Call Stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력

2-2 멀티 catch블럭

  • 내용이 같은 catch 블럭을 하나로 합친 것

    -> catch의 내용이 동일하다면...

    -> 이렇게 중복을 제거하면서 만들 수 있다.

    주의 1)
    -> catch문의 두 개의 예외처리가 부모 자식관계라면... 굳이 저렇게 두 개의 예외처리 할 필요 X - ParentException 하나만 사용하면 된다.

    주의 2)
    -> ExceptionA의 메서드(methodA();) 사용할 수 없다.
    즉, ExceptionA 와 ExceptionB의 공통 멤버만 사용가능. 만약 사용하고 싶다면 instanceof로 형변화 후,, 사용 가능.

3. Buffer & Wrapper

3-1 Buffer란?..

  • 버퍼란 임시 저장 공간을 의미 합니다. 정확히 말하면,, A와 B가 서로 입출력을 수행하는데에 있어서 속도차이를 극복하기 위해 사용하는 임시 저장 공간을 의미한다.

  • Ex) Buffer

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class WriteFile
{
    public static void main(String[] args)
    {
        BufferedWriter bw = null;
        try
        {
            String content = "이 내용을 메모장 파일에 입력할 것";
            File file = new File("C:\\Users\\Desktop\\임시파일.txt");

            FileWriter fw = new FileWriter(file);
            bw = new BufferedWriter(fw);
            bw.write(content);
            System.out.println("!!! 파일 작성이 완료됨");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if (bw != null)
                {
                    bw.close();
                }
            }
            catch (IOException e)
            {
                System.out.println("BufferedWriter를 종료할 때 에러 발생 : " + e);
            }
        }
    }
}

3-2 Wrapper란?..

  • 자바의 자료형은 크게 기본 타입(primitive type)과 참조타입(reference type)으로 나누어진다.

  • 대표적으로 기본 타입은 char, int, float, double, boolean 등이 있고 참조 타입은 class, interface 등이 있다.

  • 기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 한다.

  • 래퍼 클래스 종류

  • Wrapper 클래스의 기본 메서드...

-> Wrapper 클래스 객체에서 메소드 사용은 형변환이 가능한 메소드만 사용가능.

boxing과 unboxing..

  • boxing은 말 그대로 박싱.(기본 자료형의 경우 wrappeer 클래스 객체로 만들기 위해 박싱)
  • unboxing은 말 그대로 언박싱(wrappeer 클래스 객체는 기본 자료형으로 만들기 위해 감싸진 것을 언 박싱 )

  • (2)이 더 선호 되는 이유는 공간 및 시간 성능이 크게 향상될 가능성이 높기 때문이다.
profile
백엔드/ 개발자

0개의 댓글