클라우드 스쿨/강의 정리

7주차 - JAVA

qqlzzb 2023. 11. 23. 15:17
기간 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