본문 바로가기
728x90
반응형

Java59

[Java Basic] 35 - 컬렉션 프레임워크5 (Arrays, Comparable, Comparator) 이번 포스팅은 지난 번과 마찬가지로 내용이 많지는 않다. Arrays는 Java 배열 객체를 조금 더 쉽게 다루기 위해 배열에 특화된 몇몇 매서드가 static으로 정의되어 있기 때문에 사용법 자체가 어렵거나 이해를 요하는 부분이 거의 없다. 다만, Arrays에서 제공하는 sort(), 즉 정렬 기능을 하는 매서드의 경우, Comparable 인터페이스에 정의된 내용을 구현하여 사용하기 때문에 Comparable과 이와 연관된 Comparator 인터페이스에 대해서는 확실히 짚고 넘어가야 한다(그리고 개념이 처음 접하면 약간 어렵다). 오늘의 포스팅 내용을 시작해보자. 1. Arrays 클래스 Arrays 클래스는 java.util 패키지에 속한 클래스로, Java의 배열을 다루기 위한 매서드들이 정의.. 2022. 9. 5.
[Java Basic] 34 - 컬렉션 프레임워크4 (Iterator, ListIterator, Enumeration) 컬렉션 프레임워크에 속하는, 데이터 집단을 다루는 객체들은 자신들이 가지는 요소(Element)에 접근하여 값을 확인할 수 있는 인터페이스를 사용할 수 있는 iterator()라는 매서드를 가지고 있다. 이 iterator() 매서드의 반환값은 Iterator 객체인데, 데이터 요소들의 접근과 조회를 이 Iterator 객체에서 진행할 수 있도록 몇 개의 매서드가 정의되어 있다. Iterator 외에도 ListIterator와 Enumeration이라는 이름의 인터페이스도 존재하는데, Enumeration은 Iterator와 동일한 기능을 가지는, 컬렉션 프레임워크 탄생 전에 존재하던 인터페이스고, ListIterator는 Iterator에 몇몇 매서드를 추가한, List 내 요소의 접근과 조회에 특성화.. 2022. 9. 2.
[Java Basic] 33 - 컬렉션 프레임워크3 (Stack, Queue) Stack과 Queue는 배열과 유사하나, 데이터 처리에 있어 별도의 특성을 가지는 자료 구조(Data Structure)의 한 형태다(필자가 지금까지 자료구조라는 용어를 쓰지 않았는데, ArrayList, LinkedList 역시 자료 구조의 한 형태다). Stack과 Queue의 생김새는 배열과 동일한데, 데이터를 pop()으로 추출하고 삭제하는 방식에서 차이가 있다. Stack은 후입선출(Last In First out: LIFO)의 특성을 가지며, Queue는 선입선출(First In First Out)의 특성을 가진다. 쉽게 풀자면 Stack은 배열 내에서 데이터 추출 시, 가장 마지막에 저장된 데이터가 먼저 추출되고, Queue는 가장 먼저 저장된 데이터가 먼저 출력된다. Stack의 예시는 .. 2022. 9. 1.
[Java Basic] 32 - 컬렉션 프레임워크2 (ArrayList, LinkedList) 지난 번 컬렉션 프레임워크 개요와 Vector에 대한 포스팅을 진행하면서, Vector는 컬렉션 프레임워크 등장 전 배열을 쉽게 다루기 위한 클래스라는 것을 설명했다. 그리고 이 Vector마저도 사용상의 개선사항이 존재했기 때문에, Java에서 컬렉션 프레임워크 등장과 함께, 기능이 개선된 클래스인 ArrayList가 발생했음을 함께 언급했다. 이번 포스팅에서는 데이터 집단을 다루기 위한 컬렉션 프레임워크인 ArrayList와 LinkedList에 대해 알아보려 한다. ArrayList와 LinkedList는 둘 다 List 인터페이스에 속하는, 일종의 배열 형태의 객체지만, 데이터 저장 방식이 조금 차이가 있으며 이로 인해 데이터 조회와 처리에 있어서도 장/단점이 뚜렷하다. 하나씩 살펴보자. 1. A.. 2022. 9. 1.
[Java Basic] 31 - 컬렉션 프레임워크 개요 및 Vector 클래스 Java에서 여러 데이터를 하나의 집단으로 사용하기 위해 지금까지 필자가 사용한 방식은 다형성을 이용한 클래스의 상속 또는 Object 객체의 배열을 만드는 것이었다. 하지만 배열 형태의 자료를 다루기에는 여간 귀찮은 것이 한 두 가지가 아니다. 기본적으로 배열은 크기 조절이 불가하다는 점으로 인해 데이터의 추가와 삭제 시 새 배열을 만든 뒤 arraycopy 등의 매서드로 배열을 복사하는 작업이 수없이 진행되어야 한다. 또한 이러한 작업이 반복되면 메모리 공간 또한 낭비가 될 수 밖에 없다. 이러한 이유로 Java는 컬렉션 프레임워크(Collection Framework)라는 것을 제공한다. 말 그대로 Collection, 즉 '데이터 집단'을 쉽게 다룰 수 있는 Framework(작업 틀)을 제공한다.. 2022. 8. 29.
[Java Basic] 30. 형식화 클래스 Java에서 문자열을 일정한 간격으로 나열하여 출력하려면, printf()의 첫 인자에 들어가는 문자열의 타입을 나타내는 %문구 앞뒤로 스페이스를 넣어주는 방법이 있다. 하지만 값의 길이가 정형화되지 않은 경우(위의 예시에서는 이름), 수고스럽게 공백을 추가한 보람도 없이 출력되는 값들의 열이 살짝 깨져서 나오게 된다. 문자열 외에도, 평균 점수를 출력하는 경우도 소숫점 자리수와 정수 자릿수가 정렬되지 않는 경우 출력값을 읽는데 약간 성가신 상황이 일어난다. Java는 java.text 패키지에 문자로 출력되는 값들의 포맷을 지정해주는 몇 가지 클래스들을 가지고 있다. 문자열과 숫자는 물론, 날짜도 java.text 내 존재하는 패키지를 사용하여 문자열로 깔끔하게 변환 출력할 수 있다. 1. Number.. 2022. 8. 26.
[Java Basic] 29. 날짜 및 시간 관련 클래스 IT에서 날짜와 시간은 매우 중요하다. 컴퓨터의 계산 속도가 워낙 빠르다 보니, 인간이 며칠 걸려서 진행해야 할 일들도 단 몇 초면 끝나게 된다. 그렇기 때문에 복잡한 프로그램을 하나 개발해서 테스트하다가 문제가 발생하면 어디서 문제가 발생했는지 쉽게 발견하기가 어려운 경우가 생긴다. 이 때문에 거의 모든 프로그래머들은 프로그램 개발 시 프로그램의 동작 행위를 일일이 기록할 수 있는 로그라는 것을 별도의 파일에 작성하게 한다. 프로그램 상에서 동작의 문제가 발생했을 때 이 로그를 참조하면 어디서 문제가 발생했는지 쉽게 파악할 수 있다. 그리고 대부분의 로그는 발생 시간도 굉장히 중요하다. 특히 다량의 데이터를 처리하거나 네트워크 통신이 필요한 프로그램의 경우 더욱 중요한데, 통신이 안되거나 데이터가 많아.. 2022. 8. 24.
[Java Basic] 28. Wrapper 클래스와 기타 클래스 1. Wrapper 클래스 (1) Wrapper 클래스 개요 및 특성 Java의 기본 자료형인 boolean, byte, short, int, long, float, double, char는 클래스로 정의된 것이 아니기에 객체가 아니다. 그렇기 때문에 매서드에서 객체를 매개 인자로 요구함에도 어쩔 수 없이 기본 자료형 변수를 입력해야 하는 경우처럼 기본형 자료를 객체로 변경해야할 때가 있는데, 이 때 사용되는 것이 래퍼(Wrapper) 클래스다. Wrapper 클래스는 Wrapper라는 이름의 클래스가 아니라, 기본 자료형을 객체화 시킨 클래스를 총칭하는 것이다. 앞선 포스팅의 어떤 예제에서 문자열로 지정된 숫자를 정수형으로 변경할 때 사용했던 Integer.parseInt() 매서드를 떠올려보자. 이 .. 2022. 8. 22.
[Java Basic] 27. java.lang.StringBuffer, StringBuilder 클래스, 문자열 인코딩 앞선 포스팅에서 java.lang.String 클래스에 대한 내용을 설명하면서 String 클래스는 Immutable, 변수가 참조하는 메모리 주소에 저장된 값을 변경할 수 없다는 특성에 대해 설명했었다. 이러한 특성 때문에 String 인스턴스의 경우, "+"로 문자열을 합산하는 연산작업이나 변경 작업이 빈번해지는 경우, 메모리 공간 소모율이 증가할 수 밖에 없다. 따라서 Java에서는 변수에 할당된 값, 즉 메모리에 적재된 문자열 값도 메모리에서 바로 변경할 수 있는 StringBuffer라는 클래스를 별도로 제공한다. 변수가 참조하는 메모리 주소에 저장된 값을 변경할 수 있기 때문에 StringBuffer는 mutable(변이, 변경이 가능)한 특성을 가진다. StringBuffer 외에도 멀티스레.. 2022. 8. 16.
[Java Basic] 26. java.lang.String 클래스 이번 포스팅에서는 프로그래밍을 진행하면서 빼놓을 수 없는 문자열과 관련된 내용에 대해 알아보려한다. 문자열의 경우 C에서 문자 배열을 통해 구현하도록 되어 있으나, 이 과정이 번거롭기 때문에 Java에서는 String이라는 클래스를 제공하여 조금 더 간편하게 문자열을 표시할 수 있도록 하고 있다. String 클래스에 대한 본론으로 들어가보자. 1. String 클래스 특징 (1) Java 문자열은 문자 배열로 선언이 가능하다. 서두에서 언급한 내용대로, Java의 문자열은 문자(char) 배열과 동일한 의미를 가진다. String 클래스의 Documentation을 보면 지금까지 선언한 String 참조타입 변수 선언 형태를 문자 배열로도 동일하게 구현할 수 있음을 알 수 있다. 참고로 문자 배열 형태.. 2022. 8. 15.
[Java Basic] 25. java.lang.Object 클래스 Java에서 유일하게 import 없이 사용할 있는 패키지는 java.lang 패키지다. 기본 패키지인만큼 많이 사용하는 String, System 등의 클래스들이 대거 포함되어 있다. 이번 포스팅에서는 java.lang 패키지의 기장 기본적인 클래스인 Object를 비롯하여, 자주 사용하는 java.lang 패키지 클래스와 매서드에 대해 알아보려 한다. 먼저 최상위 클래스인 Object부터 살펴보자. [ java.lang.Object 클래스 ] java.lang.Object 클래스는 Java의 최상위 클래스이기 때문에, Java에서 생성된 모든 클래스의 상위 클래스로 지정된다. 따라서 Object 클래스에 정의된 모든 매서드는 하위 클래스에서 사용 및 오버라이딩(Override)이 가능하다. Objec.. 2022. 8. 12.
[Java Basic] 24. 예외 발생시키기와 사용자 지정 예외 생성 지난 포스팅에 이어 Java 예외와 관련된 내용을 계속 진행한다. 이번 포스팅에서는 Java의 패키지에 정의된 예외를 일부러 발생시키는 예외 발생(throw exception)과 사용자 지정 예외를 생성하는 방법에 대해 알아보려 한다. 1. 예외 발생시키기 - throw 문 작성한 코드에 문제가 없음에도 예외를 일부러 일으킬 수 있는 방법이 있다. Java는 throw라는 이름의 키워드를 제공하는데, 해당 키워드는 Java의 예외 클래스 인스턴스를 catch 문으로 던지도록 유도하는 역할을 한다. 따라서 throw문은 반드시 try 문 블럭 내에서만 사용이 가능하다. throw 문은 아래와 같이 사용한다. try { Exception_클래스명 참조변수명 = new Exception_클래스명 ("예외 설명.. 2022. 8. 8.
728x90
반응형