기간 | 230619 - 230623 |
배운 내용 | JAVA |
◎ JAVA
1. 클래스 로더
- 클래스 로더 종류
1) 부트스트랩 (Bootstrap) Class Loader
Java 8
jre/lib/rt.jar 및 기타 핵심 라이브러리와 같은 JDK의 내부 클래스를 로드한다.
Java 9 이후
더 이상 /rt.jar이 존재하지 않으며, /lib 내에 모듈화 되어 포함됐다.
예) java.base.jmod
2) 확장 (Extensions) Class Loader
($JAVA_HOME/jre/lib/ext/*.jar)
Java 9 이후 Platform Loader로 변경
3) 시스템 (System) Class Loader.
Classpath에 있는 클래스 파일 혹은 jar에 속한 클래스들을 로드한다.
2. 파일 입출력
data 폴더 안에 있는 score.txt 파일을 한 줄씩 읽어서,
학생별 평균을 구하는 프로그램을 작성
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Lab10 {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("data/score.txt");
BufferedReader br = new BufferedReader(fr);
String line = "";
int average=0;
while(line != null){
line = br.readLine();
if(line==null) break;
String[] score = line.split(" ");
for(int i=1; i<=3; i++){
average+=Integer.parseInt(score[i]);
}
System.out.println(score[0]+"의 평균 : "+average/3);
average=0;
}
br.close(); fr.close();
}
}
3. 초기화 블락
public class Ex05_InitalizationBlock {
public static void main(String[] args) {
Test one1 = new Test();
Test one2 = new Test();
A obj = new A();
System.out.println(obj.i);
}
}
class A{
int i = 10; // 객체를 생성하면 2. 초기화 문장
{ i =11;
System.out.println(" 초기화 블락 ");
} //3. 초기화 블락 //문장을 담을 수 있음.
static { //클래스가 메모리에 로드 될 때 // static 초기화 블락
System.out.println("1. static 초기화 블락 ");
// i = 12; // static field만 사용가능
} //static 초기화 블락
A(){ // 4. 생성자
i =12 ;
System.out.println(" 생성자 ");
}
}
class Test{
int[] data1 = new int[100] ; //초기화 문장
static int[] data2 = new int[100]; //초기화 문장
{ //객체가 생성될 때 마다 실행 //초기화 블락. 생성자 보다 우선.
for(int i = 0 ; i<100 ; i++){
data1[i] = i+1;
}
System.out.println("초기화 블락 실행 ") ;
}
static { //클래스가 메모리에 로드 될 때 // static 초기화 블락
for(int i = 0 ; i<100 ; i++){
data2[i] = i+1;
}
System.out.println("static 초기화 블락 실행 ") ;
}
}
- 객체 생성 순서 (new A)
1) 클래스로더가 A클래스를 찾아서 (method area) 메모리에 로드 -> 이때 static 필드 초기화 > 초기화 문장 있으면 실행 > static 초기화 블락이 있으면 실행
2) 객체 생성
Heap 메모리 영역에 instance 변수들을 생성 > 초기화 문장 있으면 실행 > 초기화 블락 있으면 실행 > 생성자 호출(이때 부모클래스의 생성자부터 실행 완료됨)
초기화 문장과 초기화 블락은 생성자보다 먼저 실행된다.
4. 클래스 안에 클래스. 내부 클래스
1) static inner class : 외부 클래스의 객체 없이도 단독으로 내부 클래스 객체 생성 가능
class A{
static class B{ }
}
A.class A$B.class
2) inner class : 외부 클래스 객체 없이 단독으로 내부 클래스 객체 생성 불가능
class A{
class B{ }
}
A.class A$B.class
3) local class : 메서드 안에 클래스
class A {
void m() {
class ...
}
}
4) 익명 클래스
5. InetAddress
: 주소 관련된 클래스
도메인 이름 쓰고 InetAddress 객체 만들어서 ip 꺼낼 수 있음
ip는 DNS에게 질의해서 가져옴
ip 하나 아니고 여러 개여도 다 가져올 수 있음
6. 함수형 인터페이스
java.util.function 패키지가 자주 사용되는 함수형 인터페이스 제공
매개변수 유무, 반환형 유무에 따라 runnable, supplier 등 사용
1) Collection 인터페이스 : 하나의 자료를 모아서 관리하는 데 필요한 기능 제공
2) Set 인터페이스
: Collection을 상속받음.
저장되는 객체에 순서가 부여되지 않으며 객체의 중복 저장을 허용하지 않음.
구현 클래스에는 HashSet, TreeSet가 있음.
3) List 인터페이스
: Collection을 상속받음.
저장되는 객체에 순서가 부여되고 객체의 중복 저장을 허용함.
구현 클래스에는 LinkedList, ArrayList, Vector, Stack이 있음.
4) Map 인터페이스
: 키/값 쌍을 저장.
key 값은 중복 허용하지 않고, value값은 중복을 허용함.
구현 클래스에는 Hashtable, HashMap, TreeMap이 있음.
7. 멀티스레드, 멀티프로세스
멀티스레드 - 메모리 같은 자원들을 공유.
멀티프로세스 - 메모리 공유 안 함.
중요한 메모리 장애 나면 멀티스레드는 다 같이 문제 생기지만 프로세스는 독립적
8. 1대 1 채팅 프로그램
서버 클라이언트 각각 읽기, 보내기 스레드 필요.
보내기 스레드 : 키보드로부터 입력받은 거 보내는 스레드
-> 서버나 클라이언트나 보내기 스레드 같지만 아웃풋 스트림 다름
DataSender는 클라이언트 / 서버 둘 다 써도 됨, 아웃풋스트림 방향만 다를 뿐
읽기도 같은데 어디서 읽냐의 차이
클라이언트는 서버가 보내준 거에서 읽고, 서버는?
9. 채팅 프로그램 구현
공부 후 추가예정,,
'클라우드 스쿨 > 강의 정리' 카테고리의 다른 글
9주차 - 프로시저, 트리거, 스프링 (0) | 2023.11.27 |
---|---|
8주차 - DB (0) | 2023.11.24 |
6주차 - JAVA (0) | 2023.11.22 |
5주차 - React (0) | 2023.11.21 |
4주차 - Node.js (0) | 2023.11.20 |