2023. 5. 26. 19:48ㆍLanguages/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 |