본문 바로가기
728x90
반응형

Java51

[Java Basic] 39 - Generic 개요와 사용법 Java의 클래스를 하나 만들어보자. 컬렉션 프레임워크와 유사하게 add() 매서드로 매개인자의 값을 컬렉션 프레임워크에 저장하고, toString()으로는 저장된 컬렉션 프레임워크 객체를 출력하는 기능을 넣어보자. 아래와 유사한 코드가 작성될 것이다. 이제, 이 클래스를 기반으로 DummyList의 각 인스턴스 내에 존재하는 arrList가 단일 객체 타입의 데이터만 저장되어야한다는 가정을 추가해보자. 만약 정수형이라면 아래와 같이 코드가 변경될 것이다. 나머지 자료형 역시 위와 같은 방식의 DummyList 클래스를 복사해서 이름만 변경하면 된다. 하지만 이 방법의 문제점은 7가지 기본 자료형 외의 객체형 타입 자료가 추가되는 경우, 그 객체 타입에 맞는 클래스를 다시 추가해서 정의해야한다는 것이 첫.. 2022. 9. 12.
[Java Basic] 38 - 컬렉션 프레임워크8 (java.util.Collections) 컬렉션 프레임워크의 마지막 포스팅이다. 이번 포스팅에서는 Collections 클래스에 대해 알아보려한다. 배열을 쉽게 다루기 위해 java.util 패키지에 Arrays 클래스가 정의되어 있는 것처럼, 컬렉션 프레임워크 역시 소속된 클래스를 조금 더 효율적으로 제어하기 위한 Collections 클래스가 정의되어 있다. 하지만 Arrays가 대부분 매서드 영역에서 기능만을 제어하는 것과 달리, Collections는 컬렉션 단위에서의 기능을 제어할 수 있는 매서드를 제공한다. 컬렉션 프레임워크에 해당하는 클래스가 한 종류의 객체만 저장할 수 있도록 만드는 Collection 타입으로 변환하는 매서드 혹은 멀티스레드(Multi-Thread)에 활용할 수 있도록 Collection에 동기화가 적용된 Col.. 2022. 9. 7.
[Java Basic] 37 - 컬렉션 프레임워크7 (HashMap, TreeMap, Properties) 이번 포스팅에서는 컬렉션 프레임워크의 기본 인터페이스 중 하나인 Map에 속하는 클래스들에 대해 알아보려한다. Map은 Key(K), Value(V)로 구성된 데이터인데 예시로 들 수 있는 것은 json이라는 파일 형식과 Python의 Dictionary 자료형이다. Map은 데이터 접근을 위해 Key를 사용하기 때문에 Key는 중복이 불가능하나, 데이터(Value)는 Key가 다르더라도 동일한 값을 저장하는 것이 가능하다. { "username": "bluesky", "nickname": "bluesky" } Map은 Key와 Value 두 데이터를 한 번에 다루기 때문에 다른 컬렉션 프레임워크와 비교했을 때 구조가 독특하다. Key와 Value는 Map 클래스 내부의 Entry라는 내부 클래스에 정의.. 2022. 9. 7.
[Java Basic] 36 - 컬렉션 프레임워크6 (HashSet, TreeSet) 컬렉션 프레임워크를 구성하는 메인 인터페이스는 List, Set, Map 세 가지가 존재한다. 지금까지는 List와 컬렉션 프레임워크 존재 전에 사용했던 Vector에 대해서 알아보았는데, 이들은 중복 값 입력을 허용하며, 값이 저장된 순서도 유지한다는 특성이 있다. 이번 포스팅에서 살펴볼 HashSet과 TreeSet은 지금까지 살펴보았던 List와 달리 Set 인터페이스를 구현하는 클래스인데, 이들은 중복되는 값의 저장을 허용하지 않으며 저장 순서도 유지하지 않는다. 값의 중복을 허용하지 않기 때문에 데이터베이스(DB)에서 PrimaryKey 역할을 하는 값들의 저장에 많이 사용한다. 예를 들면 어느 기업의 직원 정보 중 사번이나, 회원 정보 중 회원 번호, 혹은 바로 다음 포스팅에서 다룰 Map 컬.. 2022. 9. 5.
[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.
728x90
반응형