TIL(2022.03.03)

조지성·2022년 3월 3일
0

TIL

목록 보기
38/78
post-thumbnail

동기와 비동기

  • 동기 : 일의 순서가 있다.
    동기는 CPU가 멍때리는 상황이 발생할 수 있다.
  • 비동기 : 일의 순서가 없다
    빠른 속도로 실행해서 동시에 진행하는 효과를 볼 수 있다.
    총합시간은 각각 실행하는 것보다 느리다.
    CPU가 멍때리는 시간을 없애준다.

예외처리 (Exception)

  1. 운영 전 예외는 컴파일 시 잡음
  2. 운영 후 예외는 런타임 시 잡음
package ch07;

class{
	void shoot() {
		System.out.println("총을 발사했습니다.");
	}
}

public class ExceptionEx01 {
	public static void main(String[] args) {
		//컴파일 예외 (자바가 알 수 있다.)
		try {
			Thread.sleep(1000); //메인스페드 1초 동안 잠을 잔다.
		} catch (InterruptedException e) { // 방해 - 윈도우에 치명적 오류 등..
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//런타임 예외( 개발자가 알 수 있다.)
		int[] nums = {1,2,3};
		try {
			System.out.println(nums[3]);
		} catch (ArrayIndexOutOfBoundsException e) {
			//catch의 역활은 try하다가 예외가 발생하면 어떻게 처리할지 정의하는 영역
			System.out.println("괜찮아 그냥 진행해");
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
		
		총 s = null;
		try {
			s.shoot();
		} catch (Exception e) {
			System.out.println("총이 없어서 발사하지 못했습니다.");
		}
		
		System.out.println("매인 스레드 종료");
	}
}

String

  • String은 클래스
    1.기본자료형x
    2.주소를 가지고있다.
  • char배열로 만들어짐
  • 원래 new를 통해서 만들어야하지만, 그냥 바로 만들 수 있게 허용
  • String 상수 풀에서 같은 내용이면 같은 곳을 가리킴
  • new를 통해 만들지 않으면 특징
    장 : 같은 문자열이 같은 공간 공유 -> 메모리효율높다
    단 : 문자열을 변경할때마다 새로운 공간이 할당
package ch07;

public class StringEx01 {
	public static void main(String[] args) {
		String s1 = new String("바다");
		String s2 = new String("바다");
		System.out.println(s1 == s2); // ==는 주소를 비교
		
		String s3 = "바다";
		String s4 = "바다";
		System.out.println(s3 == s4);
		
		s3 = s3 + "태양"; // String 상수 풀에 새로운 공간으로 만들어짐
		s3  = s3 + "물"; //String 상수 풀에 새로운 공간으로 만들어짐
		//기존의 바다태양은 쓰레기 수집 대상 GC에 의해 수거됨
		
		System.out.println(s3);
		System.out.println(s4);
		
		//문자열을 비교할 때는 == 아닌 equals
		//문자열 값 자체과 주소 두개를 비교
		System.out.println(s1.equals(s2));
	}
}

버퍼

  • 버퍼 : 임시 저장 공간
  • Stream
    1. 데이터의 흐름 (데이터 선)
    2. 1Byte(8bit)씩 끊어서 전송
  • 통신은 항상 인코딩과 디코딩이 필요함
package ch07;

import java.io.IOException;
import java.io.InputStream;

public class StreamEx01 {
	public static void main(String[] args) {
		InputStream in = System.in; // System.in(키보드)
		
		//1. 키보드는 A를 인코딩해서 01000001로 컴퓨터에게 전송
		//2 ByteSteam으로 흘러들어간다(Input)
		//3 read() 메서드로 01000001 -> 65로 디코딩한다.
		//4. 65를 문자로 부호화 시킨다.
		try {
			int data = in.read(); // 2진수 -> 10진수로
			System.out.println((char)data); //부호화
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
profile
초보 개발자의 성장기💻

0개의 댓글