▸JAVA/기본 문법45 예외(Exception) 처리하기_throws [4/5] [ throws ] 예외를 직접 처리하지 않고 '던지는' 것 JVM에서 생성된 예외 객체를 직접 처리하지 않고 메소드를 호출한 곳으로 넘겨줌 (리턴과 비슷) 예외 객체가 반환되면 메소드를 호출한 곳에서는 그 예외 객체를 처리(catch)해줘야 함 메소드의 리턴값과 같이, throws가 선언된 생성자나 메소드는 실행 중 발생한 예외 객체를 직접 처리(catch)하지 않고 호출한 곳에 반환해줍니다. 메소드의 리턴값은 그냥 무시해도 되지만 예외 객체는 무시할 수가 없는 것이라 호출한 쪽에서 꼭 처리를 해줘야 합니다. 파일 입출력 기능을 가진 FileInputStream 클래스는 파일을 열고 읽는 등의 생성자와 메소드를 실행할 때 예외 처리가 없으면 컴파일 에러가 납니다. 그 이유는 아래와 같이 throws가 .. ▸JAVA/기본 문법 2019. 12. 13. 예외(Exception) 처리하기_'try-with-resources'문 [3/5] [ try-with-resources ] 'try-catch-finally'구문에서 따로 자원 해제를 해줘야 하는 불편함을 개선 Java SE-7 이상부터 지원 이전 글에서 "try-catch-finally"구문을 사용할 때는 각각의 스택프레임이 따로 생성되어 지역변수가 공유되지 않는 다는 점에 대해 얘기했습니다. try에서 열어둔 파일을 finally에서 닫기 위해서는 서로 파일의 참조변수를 공유해야하는데 변수 공유가 불가하니 구문 바깥쪽에 변수를 생성하는 방식으로 해결할 수 밖에 없었습니다. 그러다보니 가독성도 떨어지고 자원을 일일이 해제해줘야 하는 번거로움이 생겨났는데, 이를 편하게 바꿔준 구문이 바로 'try - with - resources'입니다. try문의 생성자로 자원의 참조변수를 생성해주.. ▸JAVA/기본 문법 2019. 12. 12. 예외(Exception) 처리하기_'try-catch-finally'문 [2/5] [ try-catch-finally ] 예외 처리를 위한 가장 기본적인 문법 try : 실제 내용을 실행 catch : 예외 시 어떻게 처리할 것인지 결정 finally : 실제 내용에서 마무리해야할 내용이 있다면 마지막에 처리 [ try-catch 구문 ] 기본 문법은 간단합니다. 먼저 미확인 예외에 대한 예외 처리를 간단하게 샘플로 들어보겠습니다. 사실 코드를 잘 짰다면 배열의 인덱스를 검색하는 과정에서 예외가 발생하지 않겠지만 예외라는 이름 그대로 생각지도 못하게 발생할 수 있습니다. 아래는 배열의 크기를 넘어서는 인덱스를 사용해 예외가 발생할 경우에 대한 예외 처리입니다. try에 수행할 코드를 작성한 후, catch부분에서 예외처리를 해줍니다. catch( )의 괄호안에는 JVM에서 예외처리 시.. ▸JAVA/기본 문법 2019. 12. 12. 예외(Exception) 처리하기_기본개념과 예외처리 클래스 [1/5] 자바에서 오류는 예외(exception)과 에러(Error) 2가지가 있습니다. 아래의 두 가지 설명에서 볼 수 있듯이, 개발자가 코드 내에서 처리할 수 있는 것은 "예외"에 관련된 사항입니다. [ 예외 (Exception) ] 프로그램 내에서 발생하는 예외상황으로 프로그램 내에서 처리가 가능한 것 배열의 크기에서 벗어난 인덱스에 접근하거나, 없는 파일을 열 때 등에서 발생 [ 에러(Error) ] JVM 내에서 발생하는 에러로 프로그램 내에서 처리가 불가능한 것 ThreadDeath나 가상머신(JVM)의 오작동 등을 말함 아래는 예외처리를 위한 클래스의 구조입니다. 이름이 모두 직관적이라 좋네요. 예외는 다시 "확인된 예외(Checked Exception)"와 "미확인 예외(Unchecked Excep.. ▸JAVA/기본 문법 2019. 12. 12. 컬렉션 프레임워크(컬렉션 API)_배열 다루기 [4/4] 컬렉션 프레임워크에서 배열을 다루다보니 개념정리가 잘 되어있지 않은 상태에서는 꽤 혼란스럴 수 있습니다. 클래스가 많은데 이리저리 연관되어 있는 경우가 많아서 그런 듯 합니다. 컬렉션 프레임워크의 전체 구성도는 아래와 같습니다. 실제로는 추상 클래스까지 중간에 있어서 조금 더 복잡한 구조이지만 간략히 필요한 것만 그렸습니다. [ 완전한 List 계열 컬렉션 만드는 법 ] 먼저 List 계열의 클래스들(ArraysList, Vector, LinkedList 등)은 List 인터페이스를 상속받았기 때문에 오버라이딩이 가능합니다. 즉, List 타입에 담아줄 수 있습니다. 굳이 List 계열의 컬렉션 타입을 List 타입에 담아주는 이유는 컬렉션을 여러 효율적인 알고리즘으로 처리 해주는 Collections .. ▸JAVA/기본 문법 2019. 12. 11. 컬렉션 프레임워크(컬렉션 API)_Set 계열 [3/4] List 계열은 이해하기 어렵지 않으니 따로 정리하지 않겠습니다. 컬렉션 프레임워크 및 각 계열의 특징은 이전 글을 참조 부탁드립니다. 2019/12/10 - [JAVA/기본 문법] - 컬렉션 프레임워크(컬렉션 API)_기본 개념 [1/3] 2019/12/11 - [JAVA/라이브러리(API)] - java.util.HashSet 클래스의 주요 메소드 [1/1] 2019/12/11 - [JAVA/라이브러리(API)] - java.util.TreeSet 클래스의 주요 메소드 [1/1] [ HashSet ] HashMap과 유사하지만 별도의 키 값 없이 값 자체를 해싱하여 카테고리화 하여 저장 해싱 기법을 사용하여 컬렉션 프레임워크 중 가장 빠른 데이터 처리 속도를 가짐 HashMap과 동일한 원리라고 생각.. ▸JAVA/기본 문법 2019. 12. 11. 컬렉션 프레임워크(컬렉션 API)_Map 계열 [2/4] List 계열은 이해하기 어렵지 않으니 따로 정리하지 않겠습니다. 컬렉션 프레임워크 및 각 계열의 특징은 이전 글을 참조 부탁드립니다. 2019/12/10 - [JAVA/기본 문법] - 컬렉션 프레임워크(컬렉션 API)_기본 개념 [1/3] 2019/12/11 - [JAVA/라이브러리(API)] - java.util.HashMap 클래스의 주요 메소드 [1/1] 2019/12/11 - [JAVA/라이브러리(API)] - java.util.TreeMap 클래스의 주요 메소드 [1/1] [ HashMap / HashTable ] 해시 테이블(Hash Table)을 이용한 검색 구조 사용 HashMap은 HashTable의 신버전 클래스라고 볼 수 있음 차이점은 HashMap은 동기화 처리가 불가능하고 Has.. ▸JAVA/기본 문법 2019. 12. 10. 컬렉션 프레임워크(컬렉션 API)_기본 개념 [1/4] [ 컬렉션 프레임워크 ] 여러 가지 자료구조 알고리즘을 미리 구현하여 데이터를 효율적으로 처리할 수 있도록 함 C언어의 연결리스트와 같은 개념 등을 하나의 클래스로 구현하여 쉽게 사용 가능 컬레션 프레임워크는 List, Set, Map 계열로 나뉘어집니다. [ List 계열 ] 배열 또는 연결리스트 자료구조와 동일한 구조 (순서를 가지는 자료 구조) 기존 배열과 연결리스트를 편하게 사용할 수 있도록 클래스가 구성되어 있음 ArrayList : 일반 배열을 다루는 클래스, 동기화 처리가 불가능 Vector : ArrayList와 동일하나 동기화 처리가 가능하기 때문에 속도는 상대적으로 느림 LinkedList : 연결리스트 자료구조 구현 따라서 데이터 검색과 기존 데이터 변경이 잦은 구조일 때는 Array.. ▸JAVA/기본 문법 2019. 12. 10. 정규표현식 (작성 방법 및 전방탐색, 후방탐색) [2/2] Email 주소를 검사하는 식을 예제로 들어보겠습니다. 알아보기 쉽게 생략할 수 있는 역슬레시는 생략했지만, 실제로 사용할 때는 특수문자에 모두 역슬레시를 붙여 일반 문자임을 정확히 명시해두는 것이 좋습니다. ※ Email 규칙검사 예제 1. [^-_][\\w-_]+ → ID 검사 - \\w == [a-z][A-Z][0-9], 하이픈(-), 언더바(_)만 허용함 - 시작문자에 하이픈(-)및 언더바(_)는 불허함 - 메타문자 +를 붙여 한글자 이상이 무조건 있어야 하도록 함 - 하이픈은 [ ] 에서 사용하는 범위지정 메타문자이지만, 앞뒤 범위가 없으면 일반 문자로 인식 2. [^-_]@[^-_] - 위의 검사식을 만족했고, 만족하지 못하는 문자가 나오면 다음 식으로 넘어가서 검사함 - 아이디 다음은 골뱅이.. ▸JAVA/기본 문법 2019. 12. 10. 정규표현식 (메타문자와 주의사항) [1/2] [ 정규표현식(Regular Expression - regex) ] 문자열을 찾기 위한 조건을 문자열로 표현한 것 특정 패턴의 문자열을 찾거나, 문자열이 패턴에 맞는지 검사할 때 사용 패턴 검사는 java.util.regex 패키지의 클래스들을 이용함 메소드 매개변수에 "regex"라고 써져 있는 것은 정규표현식을 매개변수로 받는다는 의미 정규표현식은 특정 패턴을 가진 문자열을 추출하거나, 이메일 주소를 입력할 때와 같이 특정 패턴에 맞게 문자열이 작성됐는지 검사할 때 사용됩니다. 아래는 정규표현식으로 문자열을 검색하는 결과를 시각화해서 보여주는 사이트 링크입니다. 검색식을 테스트해볼 때 유용합니다. https://regex101.com/ [ 정규표현식의 메타 문자 ] 특정 문자의 패턴을 표현하기 위한.. ▸JAVA/기본 문법 2019. 12. 10. 래퍼 클래스 (Wrapper Class) [ 래퍼 클래스 (Wrapper Class) ] 원시타입 변수를 객체화 시켜줌 문자열을 원시타입 변수로 바꿔서 저장해주는 메소드 등 해당 타입에 대한 여러 메소드 제공 원시타입 8개만큼 래퍼 클래스 8개가 존재 ※ 원시(primitive) 타입 (8가지) 1. 논리타입 : boolean 2. 정수타입 : byte, short, int, long 3. 실수타입 : float, double 4. 문자타입 : char 원시타입은 데이터 저장의 기본 단위입니다. 그리고 원시타입이 아닌 모든 타입의 변수는 객체(인스턴스)의 주소를 가진 변수(참조변수)입니다. 따라서 저장된 데이터를 바꿀 수 있는 단위는 오직 원시타입뿐이며, 나머지는 데이터가 저장된 위치를 가리키는 메모리 주소를 담은 변수입니다. 원시타입을 필.. ▸JAVA/기본 문법 2019. 12. 10. 열거형 클래스 (Enum Class) [ 열거형 클래스(enum class) ] 상수(final) 전용 클래스 코드는 짧고 의미를 강하게 하는 효과가 있음 정해진 상수를 매개변수로 받아야 하는 메소드의 매개변수를 강제할 수 있음 조금 어려운 개념인데 위의 세 가지 항목을 예시와 함께 정리해보겠습니다. 상세한 클래스 메소드 사용법은 아래 링크를 참조하시면 됩니다. 2019/12/10 - [JAVA/라이브러리(API)] - java.lang.Enum (열거형) 주요 메소드 [1/1] 상수(미리 정해진 값)을 사용하는 경우, 먼저 final 필드를 사용하는 방법이 있습니다. 예를 들어 제품 종류에 따른 크기와 색깔이 정해진 상수를 모아둔 클래스가 있고, 이를 필요로 하는 다른 클래스에서 가져다가 출력해주는 메소드가 있다고 가정해보겠습니다. 아래.. ▸JAVA/기본 문법 2019. 12. 10. 익명 클래스 (Anonymous Class) [ 익명 클래스 ] 별도의 클래스를 만들지 않고 인스턴스 생성과 동시에 오버라이딩 수행 일회성 오버라이딩이라고 할 수 있음 본래 한 클래스에 있는 메소드를 오버라이딩 하기 위해서는 다른 클래스에서 상속 후 오버라이딩 해야합니다. 하지만 일회성으로 오버라이딩을 하기 위해 상속받은 클래스를 새로 만드는 것은 매우 비효율적입니다. 이럴 경우 인스턴스 생성과 동시에 필요한 부분을 오버라이딩 하는 방법이 익명 클래스입니다. 문법은 간단합니다. 클래스 하나를 인스턴스로 만들고 대괄호를 열고 닫아서 필요한 부분을 오버라이딩 하면 됩니다. 대괄호 뒤에는 세미콜론(;)이 붙어야 합니다. 오버라이딩만 가능하고 새로운 메소드를 추가할 수는 없습니다. package study.first; public class Study .. ▸JAVA/기본 문법 2019. 12. 10. 내부 클래스 (Inner Class) [ 내부 클래스란? ] 클래스 또는 메소드 내부에 생성된 클래스 내부 클래스를 포함한 클래스를 외부 클래스(Outer Class)라고 함 하나의 클래스 또는 메소드에서만 사용되는 클래스가 필요할 때 사용 간단히 말하면, C언어에서 특정 함수에서만 필요한 구조체 선언을 굳이 메인 함수가 있는 곳에 하지 않고 해당 함수가 있는 곳에 따로 하는 것과 비슷한 행위입니다. Java에서는 모든 것이 클래스 단위이기 때문에 필요한 부분에다가 클래스 정의를 해주면 됩니다. 메모리 구조가 머릿속에 잘 그려져 있으면 어렵지 않게 사용이 가능합니다. [ 인스턴스 멤버 클래스 ] static이 없고, 인스턴스를 생성해줘야 하는 일반 클래스 형태의 내부 클래스 가장 일반적인 형태입니다. static을 붙이지 않았기 때문에 .. ▸JAVA/기본 문법 2019. 12. 10. 가변 길이 인수로 메소드 정의하기 [ 가변 길이 인수란? ] 메소드 파라미터를 길이가 정해져 있지 않은 배열로 받을 수 있도록 함 정확히 정해져있지 않은 갯수의 매개변수를 받아야할 때 사용 가변 길이 인수를 사용한 메소드 parameter 정의는 C언어에 없는 편리한 기능 중 하나 입니다. 물론 아주 복잡한 방법으로 구현은 할 수 있습니다. Java도 내부적으로는 분명 복잡하게 설계돼 있을 것 같긴 하지만 일단 사용은 매우 편리합니다. 두 가지 방법이 있습니다. 우리가 항상 이클립스에서 자동 생성해주는 main함수에서 볼 수 있듯이 그냥 parameter를 배열로 지정하는 것입니다. 하지만 메모리 구조에서 봤듯이, 배열(참조변수)을 함수의 인자값으로 넣어서 전달하면 결국 힙 영역에 있는 메모리 주소의 주소값만 전달해줍니다. 즉, 객체를.. ▸JAVA/기본 문법 2019. 12. 10. 이전 1 2 3 다음 💲 추천 글 반응형