본문 바로가기

예외 (Exception) 예외 (Exception) 메서드가 해야 할 일을 수행할 수 없는 상황에 부딪혔을 때 예외 처리를 해줘야 한다.자바는 오류 코드를 전파할 때 메서드 호출 연쇄를 사용하지 않는다.* 적절한 예외 클래스를 고른다. (그냥 Exception 클래스를 잡는건 반드시 피할 것)모든 예외는 Throwable 클래스의 서브클래스다. **비검사 예외는 RuntimeException의 서브클래스다.다른 예외는 모두 검사 예외다. * 개발자는 반드시 검사예외를 잡아내야 한다.비검사 예외는 개발자가 만든 논리 오류를 나타낸다.NullPointerException은 검사 대상이 아니다. 거의 모든 메서드가 NullPointerException을 던질 수 있기 때문이다.따라서 NullPointerException을 잡기보다 n..
자바(JAVA) 열거와 리플렉션 열거 enum public enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };* 열거 타입 값을 비교할 때는 간단히 ==를 사용하라 equals를 호출해도 결국 ==로 검사함.* Size notMySize = Size.valueOf("SMALL");-> notMySize를 Size.SMALL로 설정한다.* Size[] allValues = Size.values();-> values() 함수를 쓰면 모든 인스턴스를 배열로 리턴해줌.Class 클래스 어떤 객체의 참조를 저장하는 Object타입 변수가 있는 상태에서 해당 객체의 더 많은 정보를 얻고 싶다면?Object obj = ...;Class cl = obj.getClass(); // 를 빠뜨리면 IDE가 경고를 준다...
상속 (2) Object 슈퍼클래스 자바에서 모든 클래스는 Object클래스를 직/간접적으로 확장한다. 클래스에 명시적인 슈퍼클래스가 없으면 암시적으로 Object클래스를 확장한다.Object클래스는 모든 자바 객체에 적용할 수 있는 메서드를 정의한다.이 중 몇가지를 살펴본다.toString 객체의 문자열 표현을 돌려준다.x.toString() 대신에 "" + x 로 작성할 수도 있다. 이 표현식은 x가 null이거나 기본 타입 값일 때도 제대로 동작한다.배열 출력Arrays.toString(배열참조변수이름)equals 객체가 같은지 검사하는 메서드두 객체가 같은 내용을 담고 있을 때 같다고 보는 상태기반 동등성 검사가 필요한 경우에만 equals 메서드를 오버라이드 한다.인스턴스 변수가 배열이면 정적메서드 Arra..
상속 (1) 슈퍼클래스와 서브클래스 Employee 클래스의 몇 가지 기능을 보유하면서 관리자가 직원과 어떻게 다른지 명시하는 클래스 작성public class Manager extends Employee{추가된 필드추가된 메서드 또는 오버라이딩 메서드}* 슈퍼클래스는 부모 클래스고 서브클래스는 부모클래스의 기능을 상속받는 자식클래스다.* 단, 슈퍼클래스라고 더 우월하지 않다는 점이다. 오히려 서브클래스가 슈퍼클래스보다 많은 기능이 있다.메서드 오버라이딩 public class Manager extends Employee{...public double getSalary(){ // 슈퍼클래스의 메서드를 오버라이드한다.return super.getSalary() + bonus;}}* super는 this와 달리 객체에 ..
람다표현식 (2) 람다표현식 처리 람다를 사용하는 핵심 목적은 지연 실행이다.어떤 코드를 당장 사용하고 싶으면 람다를 사용할 필요가 없다.* 별도의 스레드에서 코드 실행* 코드를 여러번 실행* 알고리즘의 올바른 지점에서 코드 실행* 어떤 일이 일어날 때 코드 실행* 필요할때만 코드 실행람다를 받으려면 함수형 인터페이스를 선택or구현 해야한다.public static void repeat(int n, Runnable action){for(int i=0;i
람다표현식 (1) 람다표현식 한번이든 여러번이든 나중에 실행할 수 있게 전달하는 코드 블록.문법 : (String first , String second) -> first.length() - second.length()(String first , String second) ->{int difference = first.length() < second.length();if(difference < 0) return -1;else if(difference >0) return 1;else return 0;}여러 줄로 작성할 떄는 메서드를 작성하는 것처럼 작성한다.람다 표현식이 파라미터를 받지 않으면 파라미터가 없는 메서드처럼 빈 괄호를 붙임Runnable task = () -> {for (int i=0;i first.length..
인터페이스 (2) 인터페이스 기본메서드인터페이스 메서드 중 어느 것이든 기본 구현을 작성할 수 있다. (추상클래스는 안됨)인터페이스 메서드 충돌 public interface Person{default int getId(){return 0;}}public interface Identified{default int getId(){return Math.abs(hashCode());}}이렇게 두개의 인터페이스가 있을 때 하나의 클래스에서 두 인터페이스를 상속받으면 어떻게 해야할까?방법은 고유의 getId()를 클래스에서 새로 작성하거나, 명시하는 방법이다.public class Employee implements Person , Identified{public int getId() {return Identified.super...
인터페이스 (1) 인터페이스 서비스 공급자와 자신의 객체가 해당 서비스를 사용할 수 있게 하려는 클래스가 있을 때, 이 두 클래스 사이의 계약을 표현하는 매커니즘* 인터페이스의 모든 메서드는 자동으로 public이 된다.타입변환 상위 인터페이스 타입의 변수는 하위 인터페이스에서 상위인터페이스를 구현한 어떤 클래스의 객체라도 참조할 수 있다.가끔 역으로 슈퍼타입에서 서브타입으로 하는 것도 필요하다. 이럴 때는 변환을 해야한다.IntSequence sequence = ......;DigitSequence digits = (DigitSequence) sequence;System.out.println(digits.rest());여기서 rest()는 IntSequence의 메서드가 아니라 DigitSequence의 메서드다. 따라..