반응형

■ 객체 지향 프로그래밍의 4가지 특징

캡슐화(encapsulation)

캡슐화는 말그대로의 캡슐이라는 의미적인 표현에서 알 수 있듯이 크게 2가지 특징을 확인할 수 있습니다.

우선은 이해를 돕기 위해 캡슐형태의 감기약을 예시로 설명하겠습니다.

 

첫번째, 캡슐형태의 감기약 안에는 감기를 치료한다는 한가지의 목적을 갖는 연관성을 띄는

다양한 약품들이 들어 있다는 것을 알 수 있다.

OOP에서도 특정 역할을 하는 속성(멤버변수), 기능(메서드)을 객체로 묶은 것을 의미합니다.

 

두번째, 캡슐이 내부의 약품들에 변질과 외부의 환경으로부터 보호 하고 있듯이,

OOP에서도 접근제어자와 같은 기능들을 통해 외부접근으로부터 데이터를 보호하고 정보를

은닉하는 것을 의미합니다 

추상화(abstraction)

추상화의 개념은 자동차를 통해서 간단하게 설명이 가능합니다.

모든 종류의 자동차는 공통적으로 문이 있고, 엔진이 있으며, 바퀴가 있고 

이를 통해 문을 열고 밖으로 나오거나, 자동차에 시동을 걸거나 이동이 가능해집니다.

이러한 모든 자동차가 공통적으로 가지고 있으며 특징과 기능을 도출하는것을 추상화라고 합니다.

또한 개념적인 설명으로는 객체들의 공통 특징(멤버변수, 메서드)을 뽑아 하나의 클래스로 표현하는 것을 의미합니다.

상속성(inheritance)

상속성은 부모와 자식의 관계에서 유전과 같이 부모의 키가 커서 자식이 키가 크거나,

부모의 성격이 급해서 자식의 성격이 급하다는 등의 예시로 설명이 가능합니다.

부모의 특징(멤버변수와 메서드)을 상속받아서 자식객체에서 재정의하지 않아도 사용이 가능하기 때문에

코드의 중복을 없애고 재사용성을 높이는 효과가 있습니다.

다형성(polymorphism)

개념적으로 형태는 같은데 다른 기능을 하는 것을 의미한다.

이를 통해 코드의 재사용, 코드가 효율적으로 작성되어 유지보수에 용이합니다.

또한 오버로딩과 오버라이딩을 통해서 설명이 가능합니다.

오버로딩은 한 클래스내에서 유사하지만 기능은 다르고 이름이 같은 메서드를 여러개 정의하는 것을 의미합니다.

오버라이딩은 상속관계에 있는 부모 클래스의 메서드를 자식클래스에서 재정의 하는것을 의미합니다.

 

반응형
반응형

스트림(Stream) 이란 ? 

스트림을 이용하면 선언형(질의로 표현할 수 있다)으로 컬렉션 데이터를 처리할 수 있다.

스트림은 배열(Arrays) 또는 컬렉션(collection) 처리, 관리하기에 유용한 기능을 지원한다.


※ 대표적인 메서드 

메서드 설명
void forEach(Consumer<? super T> action) 반복적으로 Stream의 원소를 순차적으로 추출하여 작업할때 사용된다.
<R> Stream<R> map(Function<? super T,
? extends R> mapper)
Stream 원소에 순차적으로 메서드를 적용한다.
<R,A> R collect(Collector<? super T,A,R> collector) Stream 의 반환형을 지정할때 사용된다.
Stream<T> distinct() Stream 원소의 중복을 제외한 Stream 을 반환한다.  
Stream<T> filter(Predicate<? super T> predicate) Stream 원소들 중 조건에 부합하는 Stream을 반환하다.
Stream<T> sorted(Comparator<? super T> comparator) 정렬된 Stream을 반환한다. 
default : 오름차순
Comparator.reverseOrder() : 내림차순
long count() Stream 원소의 갯수를 반환한다.
OptionalDouble average() Stream 원소들의 평균을 반환한다.
이때 double 형으로 변환하기 위해 getAsDouble 메서드와 
함께 자주 사용된다.
OptionalInt max() Stream 원소들의 최대값을 반환한다.
이때 int형으로 변환하기 위해 getAsInt 메서드와 
함께 자주 사용된다.
OptionalInt min() Stream 원소들의 최솟값을 반환한다.
이때 int형으로 변환하기 위해 getAsInt 메서드와 
함께 자주 사용된다.
int sum() Stream 원소들의 합계를 반환한다.
IntStream limit(long maxSize) Stream 원소들을 첫번째 원소부터 순차적으로 maxSize 값만큼의 Stream 원소들만 IntStream형으로 반환

■ forEach 메서드 활용

Stream의 원소들을 순차적으로 람다표현식을 활용하여 처리할 수 있게 지원한다.
// Collection의 stream 메서드를 이용하여 Stream 얻기
List<String> list = Arrays.asList("HAN", "HAN", "KANG", "KIM", "PARK", "HWANG");

// forEach 메서드		
list.stream().forEach(s -> System.out.println("forEach : " + s));

// ※ 출력결과
/*
forEach : HAN
forEach : HAN
forEach : KANG
forEach : KIM
forEach : PARK
forEach : HWANG
*/

map 메서드 활용

* Strean의 전체 원소를 소문자로 변환

Stream의 전체 원소에 적용시키고 싶은 메서드를 람다 표현식으로 작성한다.
// Collection의 stream 메서드를 이용하여 Stream 얻기
List<String> list = Arrays.asList("HAN", "HAN", "KANG", "KIM", "PARK", "HWANG");

// map 메서드
list.stream().map(s -> s.toLowerCase()).forEach(s -> System.out.println("map : " + s));

// ※ 출력결과
/*
map : han
map : han
map : kang
map : kim
map : park
map : hwang
*/

collect 메서드 활용

Stream의 반환형을 지정한다.
// Collection의 stream 메서드를 이용하여 Stream 얻기
List<String> list = Arrays.asList("HAN", "HAN", "KANG", "KIM", "PARK", "HWANG");

// collect 메서드
String collectStr = list.stream().collect(Collectors.joining(" "));
System.out.println("collect : " + collectStr);

// ※ 출력결과
// collect : HAN HAN KANG KIM PARK HWANG

distinct 메서드 활용

Stream의 원소의 중복을 제외하고 재정의한 Stream을 반환한다.
// Collection의 stream 메서드를 이용하여 Stream 얻기
List<String> list = Arrays.asList("HAN", "HAN", "KANG", "KIM", "PARK", "HWANG");

// distinct 메서드
list.stream().distinct().forEach(s -> System.out.println("distinct : " + s));

// ※ 출력결과
/*
distinct : HAN
distinct : KANG
distinct : KIM
distinct : PARK
distinct : HWANG
*/

filter 메서드 활용

* 예시 조건 : 원소들 중 시작문자열이 'H' 인 원소

Stream의 원소에 조건을 주어주고 부합할 경우의 원소들로만 재정의한 Stream을 반환한다. 
// Collection의 stream 메서드를 이용하여 Stream 얻기
List<String> list = Arrays.asList("HAN", "HAN", "KANG", "KIM", "PARK", "HWANG");

// filter 메서드
list.stream().filter(s -> s.startsWith("H")).forEach(s -> System.out.println("filter : " + s));

// ※ 출력결과
/*
filter : HAN
filter : HAN
filter : HWANG
*/

sorted 메서드 활용

* 참고) 내림차순 : sorted() 함수에 파라미터로 Comparator.reverseOrder() 대입 [sorted(Comparator.reverseOrder())]

Stream의 원소들을 정렬처리 한다. (디폴트 : 오름차순)
// Collection의 stream 메서드를 이용하여 Stream 얻기
List<String> list = Arrays.asList("HAN", "HAN", "KANG", "KIM", "PARK", "HWANG");

// sorted() 메서드
// 오름차순
list.stream().sorted().forEach(s -> System.out.println("sorted : " + s));

/*
※ 정렬 전 
forEach : HAN 
forEach : HAN 
forEach : KANG 
forEach : KIM 
forEach : PARK 
forEach : HWANG

※ 정렬 후 
sorted : HAN
sorted : HAN
sorted : HWANG
sorted : KANG
sorted : KIM
sorted : PARK
*/

count 메서드 활용

Stream 원소들의 갯수를 반환한다.
// Arrays 클래스의 stream 메서드를 이용하여 Stream 얻기
int[] intArr = { 5, 4, 3, 2, 2, 9 };

// count 메서드
long count = Arrays.stream(intArr).count();
System.out.println("갯수 : " + count);

// ※ 출력결과
// 갯수 : 6

average 메서드 활용

Stream 원소들의 평균을 반환한다.
단, 반환형이 OptionalDouble 이기때문에
double형으로 형변환 해주는 getAsDouble 메서드와 함께 자주 사용된다.
// Arrays 클래스의 stream 메서드를 이용하여 Stream 얻기
int[] intArr = { 5, 4, 3, 2, 2, 9 };

// average 메서드
double average = Arrays.stream(intArr).average().getAsDouble();
System.out.println("평균 : " + average);

// ※ 출력결과
// 평균 : 4.166666666666667

max 메서드 활용

Stream 원소들 중 최대값을 반환한다.
단, 반환형이 OptionalInt 이기 때문에
int 형으로 형변환 해주는 getAsInt 메서드와 함께 자주 사용된다.
// Arrays 클래스의 stream 메서드를 이용하여 Stream 얻기
int[] intArr = { 5, 4, 3, 2, 2, 9 };

// max 메서드
int max = Arrays.stream(intArr).max().getAsInt();
System.out.println("최대값 : " + max);

// ※ 출력결과
// 최대값 : 9

min 메서드 활용

Stream 원소들 중 최솟값을 반환한다.
단, 반환형이 OptionalInt 이기 때문에
int 형으로 형변환 해주는 getAsInt 메서드와 함께 자주 사용된다.
// Arrays 클래스의 stream 메서드를 이용하여 Stream 얻기
int[] intArr = { 5, 4, 3, 2, 2, 9 };

// min 메서드
int min = Arrays.stream(intArr).min().getAsInt();
System.out.println("최솟값 : " + min);

// ※ 출력결과
// 최솟값 : 2

sum 메서드 활용

Stream의 전체 원소의 합계를 반환한다.
// Arrays 클래스의 stream 메서드를 이용하여 Stream 얻기
int[] intArr = { 5, 4, 3, 2, 2, 9 };

// sum 메서드
int sum = Arrays.stream(intArr).sum();
System.out.println("합계 : " + sum);

// ※ 출력결과
// 합계 : 25

limit 메서드 활용

Stream의 첫번째 원소부터 원하는 길이만큼 잘라서 재정의된 Stream을 반환한다.
// Arrays 클래스의 stream 메서드를 이용하여 Stream 얻기
int[] intArr = { 5, 4, 3, 2, 2, 9 };

// limit 메서드
Arrays.stream(intArr).limit(3).forEach(n -> System.out.println("limit : " + n));

/*
※ 출력결과
limit : 5
limit : 4
limit : 3
*/

SOURCE CODE

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com

반응형
반응형

Arrays 클래스

Arrays 클래스에는 배열을 다루기 위한 다양한 메소드가 포함되어 있다.
Arrays 클래스의 모든 메소드는 클래스 메소드(static method)이므로,
객체를 생성하지 않고도 바로 사용할 수 있다.


■ Arrays 대표적인 메서드 정리

메서드 설명
static Object[] copyOf(Object[] original,
int newLength)
배열을 원하는 길이만큼 복사한 배열을 반환한다.
static Object[] copyOfRange(Object[] original,
int from, int to)
배열의 복사를 지정한 부분(시작 인덱스부터 끝 인덱스까지)을 
복사한 배열을 반환한다.
static void fill(Object[] a,
int fromIndex, int toIndex, Object val)
배열의 지정한 부분(시작 인덱스부터 끝 인덱스까지)을
원하는 값으로 변환하고,
fromIndex, toIndex 매게변수가 없을경우 배열전체값을 변환
static void sort(Object[] a,
int fromIndex, int toIndex)
배열의 지정한 부분(시작 인덱스부터 끝 인덱스 -1 까지)만을
오름차순 정렬하고,

fromIndex, toIndex 매게변수가 없을경우 배열전체를 정렬
static int binarySearch(Object[] a,
int fromIndex, int toIndex, Object key)
sort()정렬이 선행되어야 정확한 위치를 반환한다.
배열의 지정한 부분(시작 인덱스부터 끝 인덱스까지)에 해당하는 
값들 중 찾고자하는 key값에 index를 반환하고,
int fromIndex, int toIndex 매게변수가 없을경우 배열전체 중 찾고자하는 
key값에 index를 반환

■ copyOf 메서드 활용

int[] nums = {1,2,3,4,5};
// 배열 복사 : 첫번째 인덱스부터 두번째 인자값에 지정한 갯수만큼 복사		
int[] copyOfArr = Arrays.copyOf(nums, 3);
System.out.println("copyOf : " + Arrays.toString(copyOfArr));

/*
※ 출력 결과
copyOf : [1, 2, 3]
*/

copyOfRange 메서드 활용

int[] nums = {1,2,3,4,5};
// 배열 원하는 위치 복사 : 두번째 인자 위치부터 세번째 인자 위치-1 까지의 배열 복사
int[] copyOfRangeArr = Arrays.copyOfRange(nums, 1, 4);
System.out.println("copyOfRange : " + Arrays.toString(copyOfRangeArr));

/*
※ 출력 결과
copyOfRange : [2, 3, 4]
*/

 sort 메서드 활용

// 배열의 정렬 : 두번째 인자 위치부터 세번째 인자 위치-1 까지의 배열을 오름차순 정렬
int[] sortNums = {5,4,3,2,1};
Arrays.sort(sortNums, 1, 4);

// 배열의 전체 원소를 오른차순 정렬
// Arrays.sort(sortNums); 
// 결과  : [1,2,3,4,5]
System.out.println("sort : " + Arrays.toString(sortNums));

/*
※ 출력 결과
sort : [5, 2, 3, 4, 1]
*/

 binarySearch 메서드 활용

int[] nums = {1,2,3,4,5};
// 원하는 원소의 인덱스 찾기 
System.out.println("binarySearch : " + Arrays.binarySearch(nums, 4));

// 오름차순 정렬이 되어있지 않은 배열의 원소 인덱스를 제대로 찾아오지 못한다.
System.out.println("binarySearchErr : " + Arrays.binarySearch(new int[] {5,4,3,2,1}, 4));

/*
※ 출력 결과
binarySearch : 3
binarySearchErr : -6
*/

 fill 메서드 활용

int[] nums = {1,2,3,4,5};
// 배열의 원소값 변환 : 두번째 인자 위치부터 세번째 인자 위치-1 까지의 배열을 원소값 수정
Arrays.fill(nums, 1, 4, 6);

// 배열의 전체 원소를 수정
// Arrays.fill(nums, 6); 
// 결과  : [6,6,6,6,6]
System.out.println("fill : " + Arrays.toString(nums));

/*
※ 출력 결과
fill : [1, 6, 6, 6, 5]
*/

SOURCE CODE

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com

반응형
반응형

StringTokenizer 클래스

문자열을 구분자(delim)을 기준으로 토큰형태로 분리하는 작업에 유용하다.
String 객체의 split 메서드와 유사하고 보다 섬세한 작업이 가능하다.


StringTokenizer 생성자 정리

생성자 설명
StringTokenizer(String str) 문자열 str를 기본 구분자(\t\n\r)로 분리
StringTokenizer(String str, String delim) 문자열 str를 특정 구분자(delim)로 분리
StringTokenizer(String str, String delim,
boolean returnDelims)
문자열 str를 특정 구분자(delim)로 분리
returnDelims 가 true : 구분자 포함
returnDelims 가 false : 구분자 불포함

StringTokenizer 메서드 정리

메서드 설명
boolean hasMoreTokens()
boolean hasMoreElements()
토큰이 존재하면 true, 토큰이 존재하지 않으면 false 반환
Object nextElement() 다음 토큰을 Object형으로 반환
String nextToken() 다음 토큰을 String형으로 반환
int countTokens() 토큰의 갯수를 int형으로 반환

■ 기본 구분자 (delim : \t, \n, \r)

// 기본 구분자 : \t\n\r
StringTokenizer defaultTokens = new StringTokenizer("write once \t run \r anywhere");
while (defaultTokens.hasMoreTokens()) {
	System.out.println(defaultTokens.nextToken());
}

/*
※ 출력 결과
write
once
run
anywhere
*/

 

 특정 구분자

// 구분자 : #/-
StringTokenizer delimTokens = new StringTokenizer("write#once/run-anywhere", "#/-");
while (delimTokens.hasMoreElements()) {
	System.out.println(delimTokens.nextElement());
}

/*
※ 출력 결과
write
once
run
anywhere
*/

 

 구분자 포함/불포함 분리

  • true : 구분자 포함
// 구분자를 포함한 토큰 추출 : #/-
StringTokenizer returnDelimsTokens = new StringTokenizer("write#once/run-anywhere", "#/-", true);
		
// 토큰의 갯수 반환 
System.out.println(returnDelimsTokens.countTokens());
while (returnDelimsTokens.hasMoreTokens()) {
	System.out.println(returnDelimsTokens.nextToken());
}

/*
※ 출력 결과
7
write
#
once
/
run
-
anywhere
*/
  • false : 구분자 불포함
// 구분자를 포함한 토큰 추출 : #/-
StringTokenizer returnDelimsTokens = new StringTokenizer("write#once/run-anywhere", "#/-", false);
		
// 토큰의 갯수 반환 
System.out.println(returnDelimsTokens.countTokens());
while (returnDelimsTokens.hasMoreTokens()) {
	System.out.println(returnDelimsTokens.nextToken());
}

/*
※ 출력 결과
write
once
run
anywhere
*/

SOURCE CODE

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com

반응형
반응형

■ JVM 이란? 

JVM(Java Virtual Machine)은
Java로 작성된 애플리케이션을 실행시키기 위해 반드시 필요한 가상 컴퓨터로서,
Java 애플리케이션이 OS와 하드웨어에 독립적으로 실행가능하게 한다.
OS와 하드웨어와의 관계가 독립적이라는 의미는
어떤 OS(Windows, Linux .. ) 라고 하더라도 해당 OS에 실행가능한 JVM만 존재한다면,
Java 애플리케이션이 실행가능하다는 것이다.
단, JVM는 OS에 종속적이기 때문에 해당 OS에서 실행가능한 JVM이 필요하다.

 


■ Java 애플리케이션 실행 구조

예시) OS가 Windows일 경우

 

JVM은 Java 애플리케이션을 OS와 하드웨어에 구애받지 않고 실행가능하게 함으로써
Java 애플리케이션이 한번 작성되면 어떤 환경(OS, 하드웨어)에서든지 실행 가능하게 만들었다.

■ JVM의 메모리 구조

응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고, JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.

■ 메서드 영역(Method Area)

인스턴스 생성을 위한 필요한 클래스 정보와 클래스 변수가 저장되는 공간이다.

각 데이터는 Runtime Constant Pool에서 Reference를 가지고 있어서

물리적 메모리 위치를 참조할 때 사용하게 된다.

 힙(Heap) 영역

인스턴스가 생성되는 공간으로 프로그램 실행 중 생성되는 모든 인스턴스가 이곳에 생성된다.

그 중에는 객체, 배열, Array 등이 있다.

인스턴스에 대한 참조가 이루어지지 않거나, 인스턴스에 사용이 종료되었을 경우에는 

메모리 공간의 효율을 높이기 위해 인스턴스는 가비지 컬렉터(Garbage Collector) 에 의해 삭제된다.

 

예시 1) Person 클래스를 인스턴스화한 스택(Stack)영역 참조변수가

          힙(Heap)공간의 인스턴스를 참조할 경우

예시 2) 스택(Stack)영역 참조변수가 힙(Heap)공간의 인스턴스를 참조하지 않을 경우

 

 스택(Stack) 영역(call stack 또는 execution stack)

메서드의 작업에 필요한 메모리 공간을 제공한다.

즉, 메소드가 작업을 진행하는동안 지역변수, 매게변수, 연산의 결과 등을 저장한다.

그리고 메소드의 작업이 종료되면 메모리공간은 반환되어 비워지고 메소드의 반환값은 

해당 메소드를 호출한 메소드에게 전달된다.

 

예시) A 메소드 내부에서 B 메소드를 호출하고 B 메소드 내부에서 C 메서드를 호출했다는 가정

 

Stack은 후입선출(LIFO : Last In First Out) 자료구조 형식이다.
따라서 Stack의 가장 상위 메서드가 현재 실행중인 메서드이고,
그 아래 메서드가 현재 실행중인 메서드를 호출한 메서드이다.

 PC Register

PC Registers는 Thread가 생성될 때 마다 생기는 공간으로 Thread가 어떠한 명령을 실행하게 될지에 대한 부분을 기록한다.

 Native method stack

자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다.

보통 C/C++등의 코드를 수행하기 위한 스택이다.

JNI(Java Native Interface)를 통해 표준에 가까운 방식으로 구현이 가능하다.

반응형
반응형

Map 계열

데이터를 key/value 쌍으로 저장하는 자료구조이다.
key는 중복이 없는 유일한 값으로 사용되며, 
value는 중복이 가능하다.
순서가 없기 때문에 랜덤으로 출력된다.


※ 대표적인 메서드 

메서드 설명
put(Object key, Object value)
putAll(Map m)
key에 해당되는 value객체를 저장
value get(key) key에 해당되는 value 반환
remove(key) key에 해당되는 value 삭제
void clear() Map의 모든 객체를 삭제
boolean isEmpty() Map이 비어있는지 확인
Set keySet() Map에 저장된 모든 key객체를 Set 계열로 반환
Collection<value> values() Map에 저장된 모든 값들을 Collection으로 반환
boolean containsKey(key) Map에 지정된 key가 있는지 boolean으로 반환
boolean containsValue(value) Map에 지정된 value가 있는지 boolean으로 반환
int size() Map에 저장된 객체의 갯수

■ Hashtable

key와 value 값으로 null 값을 허용하지 않는다.


※ 메서드 활용

import java.util.Collection;
import java.util.Hashtable;
import java.util.Set;

public class HashtableTest {

	public static void main(String[] args) {
		
		// key : String형 , value : Integer형
		Hashtable<String, Integer> map = new Hashtable<String, Integer>();
		
// 1 -- 데이터 삽입
		map.put("KIM",  160);
		map.put("PARK", 170);
		map.put("LEE", 165);
		map.put("HAN", 170);
		map.put("HONG", 180);
		
// 2 -- null 데이터 삽입 불가 (에러 발생)
		// map.put("KANG", null);
		
// 3 -- 모든 key 객체를 Set로 반환
		Set<String> keys = map.keySet();
		for(String key : keys) {
			System.out.println("Key : " + key);
		}
// 4 -- 지정한 key가 존재하는지 확인		
		System.out.println("HAN으로 지정된 key가 있는가 ? " + map.containsKey("HAN"));
		
// 5 -- 모든 value 객체를 Collection으로 반환
		Collection<Integer> values = map.values();
		for(int value : values) {
			System.out.println("value : " + value);
		}
// 6 -- 지정한 value가 존재하는지 확인		
		System.out.println("160으로 지정된 value가 있는가 ? " + map.containsValue(160));
		
// 7 -- 지정한 key에 해당하는 value 삭제
		map.remove("HAN");
		
// 8 -- Map 자료구조에 모든 데이터(key/value) 확인 
		Set<String> keySeconds = map.keySet();
		for(String key : keySeconds) {
			System.out.println("Key : " + key + ", value : " + map.get(key));
		}
	}
}

/*
※ 출력 결과
Key : HONG
Key : HAN
Key : LEE
Key : PARK
Key : KIM
HAN으로 지정된 key가 있는가 ? true
value : 180
value : 170
value : 165
value : 170
value : 160
160으로 지정된 value가 있는가 ? true
Key : HONG, value : 180
Key : LEE, value : 165
Key : PARK, value : 170
Key : KIM, value : 160
*/

SOURCE CODE

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com


 HashMap

key와 value 값으로 null 값을 허용한다.


※ 메서드 활용

import java.util.Collection;
import java.util.HashMap;
import java.util.Set;

public class HashMapTest {

	public static void main(String[] args) {
		
		// key : String형 , value : String형
		HashMap<String, String> map = new HashMap<String, String>();
		
// 1 -- 데이터 삽입
		map.put("KIM", "Inchon");
		map.put("PARK", "Gangsu");
		map.put("LEE", "Suwon");
		map.put("HAN", "Itaewon");
		map.put("HONG", "Hannam");
// 2 -- null 데이터 삽입 가능
		map.put(null, null);
		
// 3 -- 모든 key 객체를 Set로 반환
		Set<String> keys = map.keySet();
		for(String key : keys) {
			System.out.println("Key : " + key);
		}
// 4 -- 지정한 key가 존재하는지 확인
		System.out.println("HAN으로 지정된 key가 있는가 ? " + map.containsKey("HAN"));
		
// 5 -- 모든 value 객체를 Collection으로 반환
		Collection<String> values = map.values();
		for(String value : values) {
			System.out.println("value : " + value);
		}
// 6 -- 지정한 value가 존재하는지 확인		
		System.out.println("Hannam 으로 지정된 value가 있는가 ? " + map.containsValue("Hannam"));
		
// 7 -- 지정한 key에 해당하는 value 삭제
		map.remove("HAN");
		
// 8 -- Map 자료구조에 모든 데이터(key/value) 확인 
		Set<String> keySeconds = map.keySet();
		for(String key : keySeconds) {
			System.out.println("Key : " + key + ", value : " + map.get(key));
		}
	}
}

/*
※ 출력 결과
Key : null
Key : HONG
Key : HAN
Key : LEE
Key : KIM
Key : PARK
HAN으로 지정된 key가 있는가 ? true
value : null
value : Hannam
value : Itaewon
value : Suwon
value : Inchon
value : Gangsu
Hannam 으로 지정된 value가 있는가 ? true
Key : null, value : null
Key : HONG, value : Hannam
Key : LEE, value : Suwon
Key : KIM, value : Inchon
Key : PARK, value : Gangsu
*/

SOURCE CODE

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com


■ Properties 클래스 - Hashtable의 하위 클래스 

Hashtable과 사용법은 유사하며, key와 value 모두 String으로 저장할 때 사용하는 특화된 클래스이다.


메서드 설명
void setProperty(String key, String value) key에 해당되는 value 객체를 저장
String getProperty(String key) key에 해당하는 String형 value 반환
Enumeration<Object> keys() Properties에 저장되있는 모든 key를 Enumeration<Object>로 반환
Set<Object> keySet() Properties에 저장되있는 모든 key를 Set<Object>로 반환
Enumeration<?> propertyNames() Properties에 저장되있는 모든 key를 Enumeration<?>로 반환
Set<String> stringPropertyNames() Properties에 저장되있는 모든 key를 Set<String>로 반환
Enumeration<Object> elements() Properties에 저장되있는 모든 value를 Enumeration<Object>로 반환
Collection<Object> values() Properties에 저장되있는 모든 value를 Collection<Object>로 반환
boolean replace(key, oldValue, newValue) key에 해당하는 value값인 oldValue를 newValue로 변환 
해당하는 key객체가 있으면 true, 없으면 false

※ 메서드 활용

import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

public class PropertiesTest {

	public static void main(String[] args) {
		Properties prop = new Properties();
// 1 -- 데이터 삽입 : setProperty 메서드, put 메서드
		prop.setProperty("KIM", "Inchon");
		prop.put("CHOI","Anyang");
		prop.setProperty("PARK", "Gangsu");
		prop.setProperty("LEE", "Suwon");
		prop.setProperty("HAN", "Itaewon");
		prop.setProperty("HONG", "Hannam");
		
// 2 -- Properties에 있는 모든 key를 Enumeration<Object>로 반환
		Enumeration<Object> enuKeys = prop.keys();
		while(enuKeys.hasMoreElements()) {
			System.out.println("keys : " + enuKeys.nextElement());
		}
		
// 3 -- Properties에 있는 모든 key를 Enumeration<?> 로 반환
		Enumeration<?> enuNames = prop.propertyNames();
		while(enuNames.hasMoreElements()) {
			System.out.println("propertyNames : " + enuNames.nextElement());
		}
	
// 4 -- Properties에 있는 모든 key를 Set<String> 로 반환
		Set<String> setstringPropertyNames = prop.stringPropertyNames();
		Iterator<String> its = setstringPropertyNames.iterator();
		while(its.hasNext()) {
			System.out.println("stringPropertyNames : " + its.next());
		}
		
// 5 -- Properties에 있는 모든 key를 Set<Object> 로 반환
		Set<Object> setKeys = prop.keySet();
		Iterator<Object> itk = setKeys.iterator();
		while(itk.hasNext()) {
			System.out.println("keySet : " + itk.next());
		}
		
// 6 -- Properties에 있는 모든 value를 Enumeration<Object> 로 반환
		Enumeration<Object> enuValues = prop.elements();
		while(enuValues.hasMoreElements()) {
			System.out.println("elements : " + enuValues.nextElement());
		}

// 7 -- Properties에 있는 모든 value를 Collection<Object> 로 반환
		Collection<Object> colValues = prop.values();
		Iterator<Object> itv = colValues.iterator();
		while(itv.hasNext()) {
			System.out.println("values : " + itv.next());
		}
		
// 8 -- 해당하는 key의 value 값을 변경 
		System.out.println("변경 전 HAN의 위치 : "+ prop.get("HAN"));
		System.out.println(prop.replace("HAN", "Itaewon", "Gunsan"));
		System.out.println("변경 후 HAN의 위치 : "+ prop.getProperty("HAN"));
	}
}

/*
※ 출력 결과
keys : CHOI
keys : HONG
keys : HAN
keys : LEE
keys : KIM
keys : PARK
propertyNames : CHOI
propertyNames : HONG
propertyNames : HAN
propertyNames : PARK
propertyNames : LEE
propertyNames : KIM
stringPropertyNames : CHOI
stringPropertyNames : HONG
stringPropertyNames : HAN
stringPropertyNames : LEE
stringPropertyNames : KIM
stringPropertyNames : PARK
keySet : CHOI
keySet : HONG
keySet : HAN
keySet : LEE
keySet : KIM
keySet : PARK
elements : Anyang
elements : Hannam
elements : Itaewon
elements : Suwon
elements : Inchon
elements : Gangsu
values : Anyang
values : Hannam
values : Itaewon
values : Suwon
values : Inchon
values : Gangsu
변경 전 HAN의 위치 : Itaewon
true
변경 후 HAN의 위치 : Gunsan
*/

SOURCE CODE

 

hyunmin94/JavaExam

Contribute to hyunmin94/JavaExam development by creating an account on GitHub.

github.com

반응형

+ Recent posts