JAVA 35

[JAVA] Generic

제네릭(Generic)은 직역하자면 '일반적인'이라는 뜻이다. '데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법'이다. 제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것이다. Generic(제네릭)의 장점 1. 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할 수 있다. 2. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다. 즉, 관리하기가 편하다. 3. 비슷한 기능을 지원하는 경우 코드의 재사용성이 ..

JAVA 2023.06.14

[JAVA] 예외 처리 (4)

연결된 예외 (chained exception) 한 예외가 다른 예외를 발생시킬 수 있다. 예외 A가 예외 B를 발생시키면, A는 B의 원인 예외 라고한다(cause exception) 👉 왜 예외를 연결하죠? 예외를 연결하는 이유는 여러 가지 예외를 하나의 큰 분류의 예외로 묶어서 다루기 위함입니다. checked exception을 unchecked exception으로 포장(wrapping)하는데 유용하게 사용되기도 합니다 원인 예외를 다루기 위한 메소드 initCause() 지정한 예외를 원인 예외로 등록하는 메소드 getCause() 원인 예외를 반환하는 메소드 // 연결된 예외 public class main { public static void main(String[] args) { try ..

JAVA 2023.06.14

[JAVA] 예외 처리 (3)

예외 발생과 try-catch, finally 문 예외처리의 흐름 미리보기 📌 예시에서 주의깊게 봐야 할 것 우리가 예외를 어떻게 정의하고, 예외가 발생 할 수 있음을 알리고, 사용자는 예외가 발생 할 수 있음을 알고 예외를 핸들링하는지의 흐름입니다. 예외 정의하기 직접 다음과 같이 우리만의 에러를 정의 할 수 있습니다. class OurBadException extends Exception { public OurBadException() { super("위험한 행동을 하면 예외처리를 꼭 해야합니다!"); } } 클래스를 만들고, 메서드를 만들며 우리의 메서드가 위험하다고 알리기(throw, throws) class OurClass { private final Boolean just = true; // ..

JAVA 2023.06.13

[JAVA] 예외 처리 (2)

예외 클래스의 계층 구조 자바에서는 실행 시 발생할 수 있는 오류를 클래스로 정의 하였다. Object클래스 ==> 최상위 클래스 조상은 Object클래스 이므로 Exception과 Error클래스 역시 Object 클래스의 자손들이다. 모든 예외의 최고 조상은 Exception클래스이이다. Exception 클래스와 그 자손들(RuntimeException 과 자손들 제외) 예외 클래스들은 다음과 같이 두 그룹으로 나눠질 수 있다. Exception클래스와 그 자손들 RuntimeException클래스와 그 자손들 참고 자료 : https://github.com/mingseok/javajungsuk3

JAVA 2023.06.13

[JAVA] 예외처리 (1)

프로그램 오류 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 발생 시점에 따라 '컴파일 에러' 와 '런타임 에러' 로 나눌 수 있다. 컴파일 에러 ==> 컴파일 시에 발생하는 에러 .java => .class 런타임 에러 ==> 실행 시에 발생하는 에러 논리적 에러 ==> 싱행은 되지만, 의도와 다르게 동작하는 것 컴파일 에러 : 컴파일러가 소스코드에 대해 오타나 잘못된 구문, 자료형 체크 등의 기본적인 검사를 수행하여 오류가 있는지를 알려준다. 컴파일러가 알려 준 에러들을 모두 수정해서 컴파일을 성공적으로 마치고 나면, 클래스파일이 생성되고, 생성된 클래스 파일을 실행할 수 있게 된다. 런타임..

JAVA 2023.06.12

[JAVA] 인터페이스 다형성

타입 변환 자동타입 변환 📌 인터페이스 변수 = 구현객체; 는 자동으로 타입 변환이 일어납니다. public class Main { public static void main(String[] args) { // A 인터페이스에 구현체 B 대입 A a1 = new B(); // A 인터페이스에 구편체 B를 상속받은 C 대입 A a2 = new C(); } } interface A { } class B implements A {} class C extends B {} 강제 타입변환 📌 구현객체타입 변수 = (구현객체타입) 인터페이스변수; public class Main { public static void main(String[] args) { // A 인터페이스에 구현체 B 대입 A a1 = new B()..

JAVA 2023.06.01

[JAVA] 디폴트 메서드와 static 메서드

디폴트 메서드 📌 디폴트 메서드는 추상 메서드의 기본적인 구현을 제공하는 메서드입니다. 메서드 앞에 default 키워드를 붙이며 블럭{ }이 존재해야합니다. default 메서드 역시 접근 제어자가 public 이며 생략이 가능합니다. 추상 메서드가 아니기 때문에 인터페이스의 구현체들에서 필수로 재정의 할 필요는 없습니다. public class Main implements A { @Override public void a() { System.out.println("A"); } public static void main(String[] args) { Main main = new Main(); main.a(); // 디폴트 메서드 재정의 없이 바로 사용가능합니다. main.aa(); } } interfa..

JAVA 2023.06.01

[JAVA] 인터페이스

인터페이스의 역할 📌인터페이스 인터페이스는 두 객체를 연결해주는 다리 역할을 해줍니다. 사람과 삼성티비, 엘지티비 객체가 존재한다고 생각해 보겠습니다. 사람 객체는 멀티 리모컨 인터페이스를 통해서 삼성티비 객체의 채널을 변경할 수 있습니다. 이때 삼성티비가 아니라 엘지티비로 객체가 교체된다고 해도 채널을 변경할 수 있습니다. 상속 관계가 없는 다른 클래스들이 서로 동일한 행위 즉, 메서드를 구현해야할 때 인터페이스는 구현 클래스들의 동일한 사용 방법과 행위를 보장해 줄 수 있습니다. 인터페이스는 스팩이 정의된 메서드들의 집합입니다. 인터페이스의 구현 클래스들은 반드시 정의된 메서드들을 구현해야합니다. 따라서 구현 클래스들의 동일한 사용 방법과 행위를 보장해 줄 수 있습니다. 이러한 특징은 인터페이스에 다..

JAVA 2023.06.01

[JAVA] 추상 클래스

추상 클래스란 📌 클래스가 설계도라면 추상 클래스는 미완성된 설계도입니다. abstract 키워드를 사용하여 추상 클래스를 선언할 수 있습니다. public abstract class 추상클래스명 { } 추상 클래스는 추상 메서드를 포함할 수 있습니다. 추상 메서드가 없어도 추상 클래스로 선언할 수 있습니다. 추상 클래스는 자식 클래스에 상속되어 자식 클래스에 의해서만 완성될 수 있습니다. 추상 클래스는 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해서 만들 수 있습니다. ※ 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 사용한다. 추상 메서드 📌 추상 메서드는 아직 구현되지 않은 미완성된 메서드입니다. abstract 키워드를 사용하여 추상 메서드를 선언할 수 있습니다. publ..

JAVA 2023.06.01

[JAVA] instanceof

📌 다형성 기능으로 인해 해당 클래스 객체의 원래 클래스명을 체크하는것이 필요한데 이때 사용할 수 있는 명령어가 instance of 입니다. 참조변수의 형변환 가능여부 확인해 사용. 가능하면 true 반환 형변환 전에 반드시 instanceof로 확인해야한다. 이 명령어를 통해서 해당 객체가 내가 의도하는 클래스의 객체인지 확인할 수 있습니다. {대상 객체} instance of {클래스 이름} 와 같은 형태로 사용하면 응답값은 boolean 입니다. instanceof연산자는 형변환이 가능한지 확인하는대에 사용한다. 형변환이 가능하면 true를 반환한다. 형변환을 하기 전에는 반드시 instanceof 연산자로 확인하고 형변환 해야한다. // 다형성 class Parent { } class Child..

JAVA 2023.06.01