[JAVA] 인터페이스, 컬렉션 프레임워크, 스레드

2023. 5. 26. 19:48Languages/JAVA

💬 기억하고 싶거나 공부한 내용을 기록중입니다 :)   부족한 점이 많을 수 있어, 매일 배워가고 있습니다.

 

1️⃣인터페이스

 

1. 정의 및 역할

객체의 사용 방법을 정의한 타입으로, 소스 코드(개발)와 객체를 연결해주는 역할을 하고 있다.

 

2. 인터페이스와 멤버

- 인터페이스 선언:  [public] interface 인터페이스이름 {...}

- 멤버 선언

1) 상수 필드: [public][static final] 타입 상수 이름 = 값;  //static final 기재 안해도 간주됨

2) 추상 메소드 선언:  [public abstract] 리턴타입 메소드명(매개변수리스트);    //선언부(시그니처)만 있음

3) 생성자 없음

 

3. 구현

- 추상 메소드를 구현해주는 구현 메소드를 가진 구현 객체, 구현 객체를 생성하는 클래스인 구현 클래스

- 구현클래스: public class 구현클래스명 implements 인터페이스명 { }

- 다중 인터페이스: public class 구현클래스명 implements 인터페이스명1, 인터페이스명2 { }

 

4. 타입 변환

1) 자동 타입 변환 :  인터페이스 변수 = 구현객체;

2) 강제 타입 변환 : 구현클래스 변수 = (구현클래스) 인터페이스변수;

    강제 타입 변환은 자동 타입 변환을 한 객체만 가능하기에, 객체의 타입을 먼저 확인해야 한다.

// Fruit fruit = new Apple();  이렇게 자동 타입 변환 되었다면
			
if(fruit instanceof Apple) {
	Apple apple = (Apple) fruit;	// Apple의 객체라면, Apple 타입으로 강제 타입 변환 가능
}

5. 인터페이스의 다양한 사용

 1) 필드 

 2) 생성자의 지역변수

 3) 생성자의 매개변수

 4) 메소드의 지역변수

 5) 메소드의 매개변수

 

2️⃣ 컬렉션 프레임 워크 

 

1. List컬렉션: 순서 유지, 중복 가능

 

2.  Set컬렉션: 순서 유지 안됨, 중복 안됨

 

 1) 종류(대표) : HashSet, TreeSet, LinkedHashSet

 2) 반복자(Iterator) 이용 (*제네릭스 이용... String 데이터만 있다고 가정)

Set<String> set = new HashSet<>(); 
Iterator<String> iter = set.iterator(); 

while(iter.hasNext()){ 
	String 변수 = iter.next(); 
    System.out.println(변수); 
}

 

3. Map컬렉션: Key와 Value으로 구성된 객체를 저장하는 구조를 가졌다.

Map map = new HashMap(); 
map.put(K1, V1);  
map.put(K2, V2);
map.put(K3, V3);

// 1. Map.keySet

Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) { 
	String keys = iterator.next(); 
    System.out.println("key는 " + keys + ", value는 " + map.get(keys));
} 
    
 // 2. Map.entrySet 
 
 Set<map.entry<string,object>> entrySet = map.entrySet(); 
 Iterator<map.entry<string,object>> entryIterator = entrySet.iterator(); 
 while(entryIterator.hasNext()) { 
 	Map.Entry<string,object> entry = entryIterator.next(); 
    String entryKey = entry.getKey(); 
    Object entryValue = entry.getValue(); 
    System.out.println("key는 " + entryKey + ", value는 " + entryValue);
 }

 

3️⃣ 스레드

 

1. 개념

프로세스 실행 중인 프로그램
멀티 프로세스 독립적으로 프로그램들이 실행 중이며, 여러가지 작업 처리
스레드 프로그램 내 실행 흐름
멀티 스레드 한 개의 프로그램 실행하고 내부적으로 여러가지 작업 처리

2. 멀티 스레드 중 Runnable과 Thread 클래스 상속 차이

public class Fender implements Runnable {					// Runnable을 이용
	@Override
	public void run() {
		for (int i = 0; i < 5; i++) {
			try {
				System.out.println("play Fender guitar");
			} catch (Exception e) {
			}
		}
	}
}
public class Shur extends Thread {					// Thread 클래스를 상속
	@Override
	public void run() {
		for (int i = 0; i<5; i++) {
			try {
				System.out.println("play Shur guitar");
			} catch (Exception e) {
			}
		}
	}
}
public class GuitarMain {
	public static void main(String[] args) {
		
		Thread threadF = new Thread(new Fender());	// Runnable 이용
		Thread threadS = new Shur();				// Thread 클래스 상속
		
		threadF.start();
		threadS.start();
	}
}

 

'Languages > JAVA' 카테고리의 다른 글

[JAVA] Stream  (0) 2024.01.24
[JAVA] 입출력 스트림  (0) 2023.05.30
[JAVA] 컬렉션 프레임워크  (0) 2023.05.22
[JAVA] 클래스(강제 형변환)  (0) 2023.05.18
[JAVA] 상속(this/super/promotion)  (0) 2023.05.17