java
Java :: 예외 처리
프로그램 오류 프로그램 오류의 종류 컴파일 에러 : 컴파일할 때 발생하는 에러 런타임 에러 : 실행할 때 발생하는 에러 논리적 에러 : 사용자의 작성 의도와는 다른 동작 수행 예외처리 정의와 목적 Java 의 런타임 에러 - 에러(Error)와 예외(Exception) 에러 (Error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외 (Exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 예외처리 정의와 목적 정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성 목적 : 프로그램의 비정상 종료를 막고, 정상 실행상태를 유지하는 것 예외 클래스의 계층구조 RuntimeException 클래스들 : 프로그래머의 실수로 발생하는 예외 Except..
Java :: 어노테이션(Annotation)
어노테이션(Annotation) 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공 @Test // 이 메소드가 테스트 대상임을 테스트 프로그램에게 알림 ! public void method() { ... } 표준 어노테이션 Java 에서 제공하는 어노테이션 @Override 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 함 오버라이딩할 때 메소드 이름을 잘못 적는 실수 등 발생 가능 class Parent { void parentMethod() {} } class Child extends Parent { void parentmethod() {} } 오버라이딩 하려고 했으나 실수로 이름 잘못 적었을 때 ! class Child extends Parent { @Override void ..
Java :: 열거형 - Enumeration
열거형(Enumeration) 관련된 상수들을 같이 묶어 놓은 것 Java 는 타입에 안전한 열거형을 제공 class Menu { enum CoffeeMenu { ESPRESSO, AMERICANO, LATTE } enum TeaMenu { GREEN_TEA, YUTU_TEA } CoffeeMenu coffeeMenu; TeaMenu teaMenu; } 안전한 열거형이란 무슨 의미일까? 예를 들어 아래처럼 열거형을 사용하지 않고 상수로 관리한다고 생각해보자. class Menu { static int ESPRESSO = 0; static int AMERICANO = 1; static int LATTE = 2; static int GREEN_TEA = 0; static int YUJU_TEA = 1; } ..
Java :: 객체지향 5대 설계 원칙 - SOLID
객체지향 설계 5대원칙 결합도를 낮추고 응집도를 높일 수 있는, 객체지향적 설계 관점에서 지켜야 할 원칙들을 재정립 ! SOLID SRP : Single Responsibility Principle 단일 책임 원칙 OCP : Open Closed Principle 개방 폐쇄 원칙 LSP : Liskov Substitution Principle 리스코프 치환 원칙 ISP : Interface Segregation Principle 인터페이스 분리 원칙 DIP : Dependency Inversion Principle 의존성 역전 원칙 SRP 단일 책임 원칙 하나의 역할을 책임지는 코드를 함께 묶어주는 것 → 응집도 서로 다른 역할을 맡은 코드는 분리하여야 한다. 모든 클래스는 단 하나의 책임만을 가져야 함..
Java :: Stream으로 Random 수 생성
난수를 생성하는데 사용하는 Random 클래스 에는 아래 인스턴스 메소드들이 포함되어 있다. 이 메소드들은 해당 타입의 난수들로 이루어진 스트림을 반환한다. IntStream ints() LongStream longs() DoubleStream doubles() 이 메소드들이 반환하는 스트림은 크기가 정해지지 않은 무한 스트림 이므로 limit() 도 같이 사용해서 스트림의 크기를 제한해주어야 한다. limit() 은 스트림의 개수를 지정하는데 사용되고 무한 스트림을 유한 스트림으로 만들어준다. IntStream intStream = new Random().ints(); //무한 스트림 intStream.limit(5).forEach(System.out::println); //5개의 요소만 출력 매개변수..
Java :: 람다와 스트림 (2/2)
남궁성 저자의 Java의 정석 3판 스터디 스트림이란 ? 많은 수의 데이터를 다룰 때, 컬렉션이나 배열에 데이터를 담고, for 문이나 Iterator 를 이용해 코드를 작성했었다. 하지만 이런 방식의 코드는 너무 길고 가독성이 떨어진다. (재사용성도) 또 다른 문제는 데이터 소스마다 다른 방식으로 다뤄야한다는 것이다. 예를들어 List 를 정렬할 때는 Collections.sort() 를 사용해야 하고, 배열을 정렬할 때는 Arrays.sort() 를 사용해야 한다. 이런 문제점들을 해결하기 위해서 만든 것이 스트림(stream) 이다 ! 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메소드들을 정의해놓았다. 데이터 소스가 무엇이던 같은 방식으로 다룰 수 있게 되었고, 코드의 재사..
Java :: 람다와 스트림 (1/2)
남궁성 저자의 Java의 정석 3판 스터디 자바는 자바8 (JDK1.8) 에서 람다식이 추가되면서 객체지향언어인 동시에 함수형 언어가 되었다. 람다식에 대해 알아보자 😊 람다식이란 ? 람다식은 간단히 말해 method 를 하나의 식(expression)으로 표현한 것이다. method 를 람다식으로 표현하면 method의 이름과 반환값이 사라지므로, 람다식을 익명함수(anonymous function) 이라고도 한다. int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int)(Math.random() * 5) + 1); // 위 람다식을 method 로 표현하면 아래와 같다. int method() { return (int)(Math.random() * 5) + ..
Java :: Collection Class
남궁성 저자의 Java의 정석 3판 스터디 이전 글에서 Collections Framework 에 대해서 알아보았다. 이번에는 Collections Framework 의 클래스들을 알아보고자 한다. 다룰 클래스 ⬇️ ArrayList LinkedList Stack, Queue Iterator, ListIterator, Enumeration Arrays Comparator, Comparable HashSet TreeSet HashMap, Hashtable TreeMap Properties Collections ArrayList List 인터페이스를 구현했고, 기존의 Vector 를 개선한 클래스. 💡 Vector 는 기존에 작성된 소스와의 호환성을 위해 남겨두고 있는 것이기 때문에 Vector 보다는 Ar..