Langauge/Java-basic

    [Java] 예외처리(Exception Handling)

    [Java] 예외처리(Exception Handling)

    예외처리란? 예외가 발생하여 프로세스가 강제적으로 종료되는 것을 예외 처리를 통해 프로세스가 강제적으로 종료되지 않게 핸들링하는 것 자바 가상 머신은 예외 처리 구문이 있으면 예외 처리가 됐다고 판단하여 프로그램을 강제 종료하지 않는다. 예외 처리 (try - catch - finally) 예외 처리 문법은 3가지 요소(try, catch, finally)로 구성돼 있다. try : 예외가 발생할 수 있는 코드를 포함하는 블록 catch(예외 타입) : 예외 타입에 해당하는 예외를 처리하는 코드를 포함하는 블록, 다중 생성 가능 finally : 예외 발생 유무를 떠나 항상 실행되는 블록, 생략 가능 // 각 예외마다 처리해야할 내용이 다를 경우 try { // 예외가 발생할 가능성이 있는 코드 } ca..

    [Java] 예외(Exception)

    [Java] 예외(Exception)

    예외와 에러 에러 : 하드웨어의 고장 또는 JVM 자체에서 발생하는 오류를 의미하며, 개발자가 대처할 수 없는 오류를 의미한다. 예외 : 개발자가 프로그램을 작성하는 과정에서의 실수 또는 사용자의 잘못된 조작에 의해 발생하는 오류를 의미하며, 개발자가 대처할 수 있는 오류를 의미한다. 에러는 개발자가 해결할 수 있는 방법이 없지만 예외는 예외 처리(Exception Handling)을 통해 에러를 피하여 프로그램이 비정상적으로 종료되는 것을 막을 수 있다. 예외 클래스의 구조 Error 클래스와 Exception 클래스의 상속 구조 예외의 최상위 클래스는 Exception 클래스, 에러의 최상위 클래스는 Erorr 클래스다. 두 개의 클래스 모두 Throwable 클래스를 상속하고 있다. 에러와 예외 모..

    [Java] 익명 이너 클래스(Anonymous Class)

    익명 이너 클래스란? 단어 그대로 '이름을 가지지 않은 클래스'를 의미한다. 이름이 없기 때문에 생성자도 없다. 하나의 객체만을 생성하는 일회용 클래스다. 이름이 없기 때문에 다시 찾을 수도 없다. 익명 이너 클래스를 사용하면 코드를 간결화할 수 있다. (클래스 작성 + 해당 클래스 타입의 객체 생성)를 익명 이너 클래스 하나로 해결할 수 있다. 여러 개의 객체를 생성해야 하는 상황에서는 사용하지 않는 편이 좋다. 일회용 클래스이기 때문에 객체를 생성할 때마다 기능을 구현해야 하기 때문이다. // 익명 이너 클래스 new 클래스명() { // 기능 구현 }; new 인터페이스() { // 기능 구현 }; // 세미콜론(;) 필수 익명 이너 클래스 사용 예시 인터 페이스 객체 생성 public class..

    [Java] 이너 인터페이스(중첩 인터페이스)

    이너 인터페이스(중첩 인터페이스)란 이너 인터페이스란 클래스의 멤버로 선언된 인터페이스를 의미한다. 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위해서 // 이너 인터페이스 정의 class OuterClass { // 이너 인터페이스 생성 static interface InnerInterface { public 리턴타입 메서드명(); } } 이너 인터페이스의 특징 사용자 인터페이스(UI)의 이벤트 처리에 많이 사용된다. 정적 이너 인터페이스만 존재할 수 있다. static 제어자를 생략하면 컴파일러가 자동으로 추가한다. 컴파일시 '아우터 클래스$이너 인터페이스.class' 형태로 .class파일이 생성된다. 이너 인터페이스 타입의 객체 생성 객체 생성 방법으로는 구현한 하위 클래스를 이용한 방..

    [Java] 인터페이스란?

    인터페이스 정의 인터페이스는 '추상 메서드의 집합'이라고 정의할 수 있다. 인터페이스는 기본적으로 상수와 추상 메서드만 가질 수 있어 추상 클래스보다 더 높은 추상성을 가지고 있다. 추상 클래스와 비교한다면 추상 클래스는 '미완성 설계도', 인터페이스는 '밑그림'으로 나타낼 수 있다. 인터페이스 특징 interface 키워드를 이용해 인터페이스를 선언할 수 있다. 인터페이스 내부의 모든 필드는 public static final 제어자로 정의된다. 구현 객체의 같은 동작을 보장하기 위한 목적 public static final 제어자를 생략해도 컴파일러가 자동으로 추가한다. 인터페이스 내부의 모든 메서드는 추상 메서드로 인식하기 때문에 따로 abstract 키워드를 사용하지 않는다. 인터페이스의 메서드의..

    [Java] 추상 클래스와 추상 메소드 (abstract 제어자)

    [Java] 추상 클래스와 추상 메소드 (abstract 제어자)

    abstarct 제어자 abstract란? abstract의 '추상적인'의 사전적 의미를 가지며, 자바의 맥락에서는 '미완성'을 의미한다. 추상 클래스 또는 추상 메서드를 정의할 때 사용한다. abstract + class : 추상 클래스 abstract + method : 추상 메서드 추상 메서드 추상 메서드란? 추상 메서드란 기능이 정해지지 않은 미완성 메서드를 의미한다. 미완성이라는 의미는 메서드 내부에 기능이 구현되어 있지 않은 상태를 의미한다. 추상 메서드 구조 다음 코드를 보면 메서드 내부의 기능은 물론 중괄호({})조차 없다. 기능 자체가 없는 미완성 메서드로 완성 전까지는 사용할 수 없다. 완성은 하위 클래스에서 메서드 오버라이딩을 통해 완성시킬 수 있다. 범위 제어자 abstract 리턴..

    [Java] 클래스의 정점, Object 클래스

    Object 클래스란 Object 클래스는 자바의 클래스 상속계층도에서 최상위에 위치한 상위 클래스(최상위 클래스) 자바의 모든 클래스는 Object 클래스를 상속받는다. 클래스가 아무런 상속을 받지 않으면 컴파일러는 자동적으로 extneds Object를 추가하여 상속받는다. class ParentClass { // extends Object 자동 추가 } class ChildClass extends ParentClass { } Object 클래스 활용 Java의 모든 클래스는 Object 클래스의 멤버를 상속받아 사용할 수 있다. Java의 모든 클래스는 인스턴스를 생성할 때 Object 타입으로 선언하여 사용할 수 있다. // Object 타입으로 선언 Object parentClass1 = new..

    [Java] super 키워드와 super() 메서드

    [Java] super 키워드와 super() 메서드

    super 키워드와 super() 메서드 요약 공통적으로 상속 관계를 전제로 한다. super. : 상위 클래스 객체 호출 super() : 상위 클래스 생성자 호출 super 키워드 상위 클래스의 멤버를 가리키는 역할을 한다. 상위 클래스의 필드명과 하위 클래스의 필드명이 중복될 때 상위 클래스의 필드를 호출할 때 사용한다. 메서드 오버라이딩으로 가려진 상위 클래스의 필드 또는 메서드를 호출하기 위해 사용한다. 즉, super 키워드를 사용하면 상위 클래스의 멤버를 사용할 수 있다. super 키워드 구조 // super. 키워드 super.상위 클래스의 멤버 super.필드 상위 클래스의 필드명과 하위 클래스의 필드명이 중복될 때 상위 클래스의 필드를 호출 // super.필드 class Upper ..

    [Java] 메서드 오버라이딩(Method Overriding)

    [Java] 메서드 오버라이딩(Method Overriding)

    메서드 오버라이딩이란 메서드 오버라이딩(Method Overriding)은 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의하는 것 메서드 오버라이딩을 학습하며 가장 떠오른 짤.. "이 메서드는 이제 제 겁니다. 제 마음대로 할 수 있는 것입니다."같은 느낌.. class Animal { public void cry() { System.out.println("울음소리"); } } class Cat extends Animal { @Override public void cry() { // 상위 클래스의 cry() 오버라이딩 System.out.println("냐옹~"); } } class Dog extends Animal { @Override public void cry() { // 상위 클..

    [Java] instanceof : 캐스팅 가능 여부 확인

    [Java] instanceof : 캐스팅 가능 여부 확인

    instanceof 캐스팅의 가능 여부를 판단하기 위해서는 '클래스 사이의 상속 관계', '어떤 생성자로 인스턴스를 생성했는가?'를 판단해야 한다. 프로젝트의 규모가 커지고, 클래스가 많아지면 이러한 조건을 매순간 판단하는 것이 어려워진다. 이를 해결하기 위해 Java에서는 캐스팅 가능 여부를 boolean 타입으로 반환해주는 instanceof라는 연산자를 제공한다. 소스 코드가 길어져 일일이 생성 객체의 타입을 확인하기 어려운 상황에서 에러를 최소화하는 유용한 수단이 될 수 있다. -> 캐스팅 가능 여부를 확인하고, 가능한 때만 캐스팅을 수행해 실행 예외로 프로그램이 종료되는 것을 방지할 수 있다. 참조 변수 instanceof 타입명 예시 public class Test { public static..