23.11.27 - java (day06)

임연진·2023년 11월 28일

11월 27일 - java day06

웹 서버 : 클라이언트가 요청한 파일을 다운로드할 수 있게 해주는 서비스를 제공하는 프로그램

웹 브라우저 : 서버가 제공하는 파일을 다운로드 바아서 화면에 보여주는 프로그램

split(regex:"")[]

replace

toString => 글자로 바꿔달라

getter -> 생성자 만들고나서
setter -> 생성자 만들고나서

< 다형성 >

생성하는 객체의 클래스이름과 객체를 저장하는 변수의 타입을 다르게 설정
Chammpion tristana = new tristana();

업캐스팅 : 자식객체를 부모클래스(타입)의 변수에 저장가능

다운캐스팅 : 부모객체를 자식타입의 변수에 저장 불가능
단, 다운캐스팅 할 때 형변환을 직접 해주면 가능

  • 예외처리
  • throw하면 받을때는 try{} catch(){} -> alt + enter하면 자동완성

// 기존방식
ArrayList arrayLList = new ArrayList();

// 다형성
List list = new ArrayList();

// 제네릭
List<클래스이름> list = new ArrayList<클래스이름>();

Map<클래스이름1,클래스이름2> map = new HashMap<클래스이름1,클래스이름2>();

< 제네릭 > => < >에 타입넣는것, 클래스옆에다가 < T >달아놔야 함
// 아름다운 약속, 정해진 문법은 아님(T,K,E)
// T : 타입
// K : 키
// E : 개체
: 우리가 제네릭클래스 만들어놓을테니까 너네가 쓸때 알아서 (string인지, int인지~)타입넣어서 써라~

Parents parentsString = new Parents("제네릭");

    Parents<Character> parentsChar = new Parents<Character>('c');

    Parents<Integer> parentsInt = new Parents<Integer>(100);

// 제네릭을 안쓴 리스트
List integerList1 = new ArrayList();
integerList1.add("글자");
integerList1.add(100);

    List<Integer> integerList2 = new ArrayList<Integer>();
    // 제네릭으로 타입을 Integer로 설정해서 글자는 저장 못함
    //integerList2.add("글자");
    integerList2.add(100);

    Map<Integer, String> map = new HashMap<Integer, String>();
    map.put(0, "값1");

day 06 StreamMain.java

< 스트림 > : 내프로그램과 어딘가와의 통로(데이터를 운반(입출력)하는 연결통로)

내컴퓨터 -> 프로그램을 실행하려면 하드디스크에있는 파일이 RAM과 연결?되어야하는데 그때 통로가 스트림!
CPU
RAM 프로세스
HDD 파일
랜카드
I/O

ex) 해당 파일은 다른프로그램이 사용중이어서 삭제할 수 없습니다 -> 어딘가에서 스트림이 열려있다~

// 글자단위로 읽어라~
-> FileReader

// 변수는 try문 밖에서 만들어주고 사용할때는 try문 안에서사용!
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;

FileInputStream fileInputStream = new FileInputStream();
FileOutputStream fileOutputStream = new FileOutputStream();

  • 파일 입출력 사용하고나서 close로 꼭 닫아줘야함!
    fileInputStream.close();
    fileOutputStream.close();

// 1바이트 = 1비트 : 00000000~11111111


< Socket >

  • 네트워크 소켓(스트림) = 클라이언트랑 랜카드 / 서버랑 랜카드를 연결!
  • 소켓 통신 = 네트워크 입출력 프로그램(채팅 프로그램만을 만들기위한게 아니라 네트워크 관련된 모든걸 만들수있음)
  • 서버로 접속하는 코드
  • 서버소켓이 실행중이어야 클라이언트소켓이 실행됨
  • 포트를 LISTEN상태로 변경해주는 코드
    ServerSocket serverSocket = new ServerSocket(서버 포트번호);
ServerSocket serverSocket = new ServerSocket(서버ip주소, 서버 포트번호);



소켓통신할때 예외처리해주기!(try/catch 나 throw로)

디버깅 = 하나하나 실행해보면서 어떤게 (버그인지)잘못되었는지 찾음
브레이크 걸어놓고 디버깅하면 다음 브레이크 전까지 실행되고 어디가 버그인지 찾아준다.

브레이크 걸어놓고 벌레모양 눌러야 디버깅됨

보조스트림 -> 보조스트림이 있으면 성능이 더 좋아진다~ 더빨라진다~
BufferedInputStream
BufferedReader


서버 : 서비스를 제공하는 프로그램

클라이언트 : 서버가 제공하는 서비스를 이용하는 프로그램

웹 서버 : 클라이언트가 요청한 파일을 다운로드할 수 있게 해주는 서비스를 제공하는 프로그램

웹 브라우저 : 서버가 제공하는 파일을 다운로드 바아서 화면에 보여주는 프로그램

basic2/day06/ex/ChatServerMain.java & basic3/day06/ex/ChatClientMain.java 참조!

Scanner로 콘솔을 통해서 입력한 내용을
서버 -> 클라이언트
클라이언트 -> 서버

하나는 서버

하나는 클라이언트

-> 문자열 String을 이용한 문자를 주고받는것


basic2/day06/ex/FileServerMain.java & basic3/day06/ex/FileClientMain.java 참조!

Scanner로 콘솔을 통해서 입력한 내용을
클라이언트 -> 서버	파일이름 입력
서버 -> 클라이언트	파일 보내준다

하나는 서버

하나는 클라이언트
클라이언트 저장

-> 파일은 문자열 Stream이 아니라 byte로 처리해야함

0개의 댓글