분류 전체보기 329

예외 처리는 왜 해야 하나? - 예외처리, 예외클래스, 예외처리미루기

예외 처리는 왜 해야 하나? 자바에서 제공되는 클래스들 프로그램에서의 오류 컴파일 오류(compile error) 프로그램 코드 작성 중 발생하는 문법적 오류 최근에는 개발 환경(eclipse)에서 대부분의 컴파일 오류는 detection 됨 실행 오류(runtime error) 실행 중인 프로그램이 의도하지 않은 동작(bug)을 하거나 프로그램이 중지되는 오류 실행 오류는 비정상 종료가 되는 경우 시스템의 심각한 장애를 발생할 수 있음 예외 처리의 중요성 프로그램의 비정상 종료를 피하여 시스템이 원할이 실행되도록 함 실행 오류가 발생한 경우 오류의 과정을 재현하는 것은 현실적으로 힘들다 오류가 발생한 경우 log를 남겨서 추후 log 분석을 통해 그 원인을 파악하여 bug를 수정하는 것이 중요 오류와 ..

예제) 스트림을 활용하여 패키지 여행 비용 계산하기

스트림을 활용하여 패키지여행 비용 계산하기 문제 정의 여행사에 패키지 여행 상품이 있습니다. 여행 비용은 15세 이상은 100만원, 그 미만은 50만원 입니다. 고객 세 명이 패키지 여행을 떠난다고 했을 때 비용 계산과 고객 명단 검색등에 대한 연산을 스트림을 활용하여 구현해 봅니다. 고객에 대한 클래스를 만들고 ArrayList로 고객을 관리 합니다. 고객 정보는 다음과 같습니다. CustomerLee 이름 : 이순신 나이 : 40 비용 : 100 CustomerKim 이름 : 김유신 나이 : 20 비용 : 100 CustomerHong 이름 : 홍길동 나이 :13 비용 : 50 스트림을 활용한 연산 수행 고객의 명단을 출력합니다. 여행의 총 비용을 계산합니다. 고객 중 20세 이상인 사람의 이름을 정..

스트림(Stream) , reduce() 연산

스트림 이란? 자료의 대상과 관계없이 동일한 연산을 수행 배열, 컬렉션을 대상으로 연산을 수행함 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 함 자료 처리에 대한 추상화가 구현되었다고 함 한번 생성하고 사용한 스트림은 재사용할 수 없음 자료에 대한 스트림을 생성하여 연산을 수행하면 스트림은 소모됨(최종 연산이 이루어질 때 소모됨) 다른 연산을 수행하기 위해서는 스트림을 다시 생성해야 함 스트림 연산은 기존 자료를 변경하지 않음 자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간은 별도로 생성되므로 연산이 수행돼도 기존 자료에 대한 변경은 발생하지 않음 스트림 연산은 중간 연산과 최종 연산으로 구분됨 스트림에 대해 중간 연산은 여러 개의 연산이 적용될 수 있지만 최종 연산은 마지막에 한 번만..

람다식(Lambda expression)

함수형 프로그래밍과 람다식 자바는 객체 지향 프로그래밍 : 기능을 수행하긴 위해서는 객체(class)를 만들고 그 객체 내부에 멤버 변수를 선언하고 기능을 수행하는 메서드를 구현 자바 8부터 함수형 프로그래밍 방식을 지원하고 이를 람다식이라 함 함수형 프로그래밍 : 함수의 구현과 호출만으로 프로그래밍이 수행되는 방식 함수형 프로그래밍(Functional Programming: FP) 함수를 기반으로 하는 프로그래밍이고 입력받는 자료(매개변수) 이외에 외부 자료를 사용하지 않아 여려 자료가 동시에 수행되는 병렬 처리가 가능합니다. 함수형 프로그래밍은 함수의 기능이 자료에 독립적임을 보장합니다. 이는 동일한 자료에 대해 동일한 결과를 보장하고, 다양한 자료에 대해 같은 기능을 수행할 수 있습니다. 함수형 프..

내부 클래스의 정의와 유형

여러 내부 클래스의 정의와 유형 - 인스턴스 내부 클래스, 정적(static) 내부 클래스, 지역(local) 내부 클래스, 익명(anonymous) 내부 클래스 - 현재 익명 내부 클래스가 가장 많이 사용 내부 클래스란? (inner class) 클래스 내부에 선언한 클래스로 이 클래스를 감싸고 있는 외부 클래스와 밀접한 연관이 있는 경우가 많고, 다른 외부 클래스에서 사용할 일이 거의 없는 경우에 내부 클래스로 선언해서 사용함 중첩 클래스라고도 함 내부 클래스의 종류 인스턴스 , 정적(static) , 지역(local) // 익명(anonymous) 내부 클래스 변수와 선언 위치나 생성 주기가 똑같다. // 익명 내부 클래스는 다름 인스턴스 내부 클래스 내부적으로 사용할 클래스를 선언 ( privat..

컬렉션 프레임 워크 - 자바에서 제공되는 자료구조 구현 클래스들

자바에서 제공되는 자료구조 구현 클래스들 - 여기서는 이 클래스를 가져다 쓸 때 어떤 부분을 생각해야 하는지 정확하게 이해하는 것을 목표로 하기 1. 추가로 구현해야 되는 부분이 있는지. 2. 이 클래스 특성상 어떻게 출력이 될 수 있는지 3. 이 클래스는 무슨 기능을 제공하는지, 무엇을 위해서 존재하는 클래스인지 4. 내가 어떤 기능을 구현하기 위해서 가져다 쓰는 건지 컬렉션 프레임워크 프로그램 구현에 필요한 자료구조(Data Structure)를 구현해 놓은 JDK 라이브러리 java.util 패키지에 구현되어 있음 개발에 소요되는 시간을 절약하면서 최적화된 알고리즘을 사용할 수 있음 여러 구현 클래스와 인터페이스의 활용에 대한 이해가 필요함 Collection 인터페이스 하나의 객체를 관리하기 위한..

제네릭(Generic) 프로그래밍

클래스에서 주로 사용하는 제네릭 프로그래밍 무엇이든 담을 수 있는 제네릭(Generic) 프로그래밍 다양한 자료형이 쓰일 수 있는 변수 // 클래스 여러 개를 만들면 오버헤드 제네릭 자료형 정의 클래스에서 사용하는 변수의 자료형이 여러 개 일수 있고, 그 기능(메서드)은 동일한 경우 클래스의 자료형을 특정하지 않고 추후 해당 클래스를 사용할 때 지정할 수 있도록 선언 실제 사용되는 자료형의 변환은 컴파일러에 의해 검증되므로 안정적인 프로그래밍 방식 컬렉션 프레임워크에서 많이 사용되고 있음 제네릭 타입을 사용하지 않는 경우의 예 Powder와 Plastic을 재료로 쓰는 3D 프린터 만들어 보기 Object 클래스로 여러가지 형 대입 제네릭 클래스로 여러가지 형 대입 재료 2개 클래스 만들고 재료 2개 클..

ArrayList / LinkedList / Stack / Queue --- 구현하기

선형 자료구조 ( ArrayList / LinkedList / Stack / Queue ) ArrayList 구현하기 ArrayList 특징 동일한 데이터 타입을 순서에 따라 관리하는 자료 구조 정해진 크기가 있음 요소의 추가와 제거 시 다른 요소들의 이동이 필요함 배열의 i 번째 요소를 찾는 인덱스 연산이 빠름 jdk 클래스 : ArrayList, Vector 배열 구성 엘리먼트를 중간에 넣는 법 엘리먼트를 삭제하는 법 실습 배열 구성 - 배열 생성자 세팅과 배열에 추가 (add) 하는 메서드 생성 자료 집어넣을 경우 - insertElement - 넣을 수 있는 위치인지 확인 / 배열 꽉 찼는지 확인 / 가능하다면 맨 뒤부터 넣을 위치까지 뒤로 하나씩 미뤄주고 대입 자료 꺼내는 경우 - removeE..

여러가지 자료구조 (Data Structure)

여러 가지 자료구조에 대해 알아봅시다. JDK안에 우리가 구현할 자료구조에 대한 여러 가지 클래스가 구현되어있지만, 이런 원리로 구현되어있구나 확인 모든 걸 다 볼 순 없고 선형 자료 ( 배열 / 리스트 /스택 / 큐 ) 비선형 자료 (트리 / 그래프 / 해싱 ) 정도 살펴보고 구현해보기! 자료구조란 무엇인가? (Data Structure) 프로그램에서 사용할 많은 데이터를 메모리 상에서 관리하는 여러 구현 방법들 회원정보(id, name 등)들은 보통 DB에 있을 텐데 DB에 있는 정보들을 꺼내면 메모리에 있게 된다. 이 메모리에 있는 것들을 화면에도 뿌려주고 리포트도 만들고 하는데, 그것들을 어떻게 관리해야 효율적인지 최적인지 효율적인 자료구조가 성능 좋은 알고리즘의 기반이 됨 자료의 효율적인 관리는..

String 클래스, Class 클래스

String, StringBuilder, StringBuffer 클래스, text block String 클래스 String 선언하기 String str1 = new String("abc"); String str2 = "abc"; 힙 메모리에 인스턴스로 생성되는 경우와 상수 풀(constant pool)에 있는 주소를 참조하는 두 가지 방법 ① new String으로 생성하면 -> 힙 메모리에 생성 ② "abc"로 생성하면 상수 풀에 있는 "abc" 사용하는 개념 힙 메모리는 생성될때마다 다른 주소 값을 가지지만, 상수 풀의 문자열은 모두 같은 주소 값을 가짐 public class StringTest { public static void main(String[] args) { String str1 = ..