일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- bootstrap
- 인텔리제이
- wrapper
- 빌드
- 무한
- Jenkins
- 컬렉션
- 자동형변환
- 언박싱
- 클래스
- 스프링
- 제네릭
- Scanner
- 루프
- unboxing
- https://start.spring.io
- boxing
- maven
- Java
- dependency
- 제너릭
- 메소드
- 싱글턴
- 콜렉션
- Short
- 내장객체
- suvlet
- start.spring.io
- 박싱
- 싱글톤
- Today
- Total
목록K-DigitalTraining 강의 (333)
Developer Gonie
* 스트림이란? 특정 파일과 자바파일 사이의 연결다리 역할을 하며, 단방향으로만 작동함(읽기, 쓰기가 동시에 되지 않는다.) 특정 파일로부터 데이터를 읽기 위한 클래스와 특정 파일에 데이터를 쓰기 위한 클래스가 각각 존재한다. ex) FileInputStream, FileOutputStream 등 * 바이트 스트림(Byte Stream)이란? 1byte(8bit)를 input/output 할 수 있는 스트림이다. FileInputStream / FileOutputStream이 이에 속함. 1byte는 숫자, 영어를 처리하기에 충분하나 한글을 처리하기엔 충분하지 않다.(2byte 필요) 이 때문에 바이트 스트림을 이용해 한글을 처리하면 깨지는 현상이 발생한다. 한글을 다루고 싶다면 문자 스트림의 FileR..
예시코드 import java.io.File; import java.io.IOException; public class Ex11_03_File { public static void main(String[] args) { File f1 = new File("A"); // "A" => "C:\\Java_ldg\\11_\\A", src 폴더까지는 안들어감 File f2 = new File("B"); File f3 = new File("C"); File f4 = new File(f1, "ab.txt"); if (f1.exists()) { // "A" 이름의 폴더 혹은 파일이 존재하는가? System.out.println(f1 + " 존재함"); f1.renameTo(f2); // 폴더 이름을 A -> B 로 변..
예시코드 import java.io.File; public class Ex11_03_File { public static void main(String[] args) { File f1 = new File("A"); // "A" => "C:\\Java_ldg\\11_\\A", src 폴더까지는 안들어감 File f2 = new File("B"); File f3 = new File("C"); File f4 = new File(f1, "ab.txt"); if (f1.exists()) { // "A"이름의 폴더 혹은 파일이 존재하는가? System.out.println(f1 + " 존재함"); }else { System.out.println(f1 + " 존재안함"); f1.mkdir();// "A" 이름의 디렉..
예시코드 import java.io.File; public class Ex11_02_File { public static void main(String[] args) { File f = new File("C:\\Windows"); System.out.println("win: " + f); // 주소가 아니라 문자열이 반환되는게 Object 클래스의 toString()이 아니라 File 클래스가 오버라이딩한 f.toString() 호출됨 String result = f.isDirectory() ? "폴더입니다." : "파일입니다.";// 3항 연산자 System.out.println(result); String[] lists = f.list(); System.out.println("폴더 및 파일 개수: "..
예시코드 import java.io.File; public class Ex11_01_File { public static void main(String[] args) { //아래서 여러가지 방법이 가능한 이유는 File 클래스에 생성자가 다양하게 있기 때문임 // 방법1 : 역슬래시 2개를 이용 -> 역슬래시는 \n \t 같은 곳에서 사용되기 때문에 2개를 써줘야 뒤에 다른걸 기대하지 않음 //File f1 = new File("C:\\sun\\abc.txt"); // 방법2 : 슬래시 1개를 이용 // File f1 = new File("C:/sun/abc.txt"); // 방법3 : 폴더경로 + 파일명 분리1 // File f1 = new File("C:\\sun", "abc.txt"); // 방법4..
방법1 입력을 받을 때 마다 Scanner 객체를 다시 생성해주어 잔류 값이 말썽을 일으키지 않게 해주기 방법2 sc.next(); 을 넣어줘 버퍼에 남아있는 엔터를 날려주기 보통 사용자한테 입력을 받으면 사용자가 엔터를 치게 되는데 "사과\n" next() 혹은 nextInt() 는 \n 앞에 있는 것만 가져다 쓰므로 \n이 버퍼에 남아있게 된다. 이것 때문에 계속 무한루프 도는 경우가 있는데 위의 해결책을 사용하면 문제가 해결된다.
* 동기화란? 두개 이상의 쓰레드가 공유자원을 사용할 때 한 사람씩만 순차적으로 접근하도록 하는 기법이다. 동시에 두 쓰레드가 공유자원에 접근하게 될 경우 한쪽만 접근이 허용되며 한 쪽은 앞사람이 일을 마칠 때 까지 대기상태가 된다. 공유자원을 동기화해주지 않을 경우 발생하는 문제점은 아래의 예시 코드를 통해 알 수 있다. * 동기화 시켜주는 방법 두가지 1) synchronized 키워드를 동기화 시키고자 하는 메서드에 붙여서 메서드를 통째로 동기화 시키는 것 2) synchronized 키워드를 블록화 해서 일부 영역만 동기화 시키는 것 * 임계영역이란? 다른 주체가 접근중일 때 접근하지 못하도록 제한하는 영역으로 synchronized 키워드를 이용해 설정한다. NotSync로 공유자원 사용시 발생..
* 데몬쓰레드란? 데몬쓰레드는 일반쓰레드가 모두 종료되면 무한루프를 돌고 있더라도 강제적으로 자동 종료된다. 일반 쓰레드의 작업을 돕는 쓰레드로 가비지 컬렉터, 워드프로세서의 자동저장, 화면자동 생신 등에 쓰인다. 일반쓰레드를 데몬쓰레드로 지정하기 위해서는 쓰레드 객체.setDaemon(true)를 호출하면 된다. 인자를 false로 변경하면 메인 쓰레드가 종료되어도 이 쓰레드가 살아있게 된다. 보통 데몬쓰레드가 아닌 일반 쓰레드를 보조하는 역할을 수행하는데 사용된다. 코드 Test 클래스의 run() 메소드는 while문으로 무한루프를 돌고 있었는데 데몬쓰레드로 지정했더니 main 함수 종료시 같이 종료되었다. 반대의 경우가 궁금하다면 객체.setDaemon(true) 의 인자를 false로 수정하고 ..
* 우선순위가 높아진다고 높아진 것만 수행되는게 아니라 이게 더 많이 먼저 수행될 가능성이 높아지는 것 뿐이다. * 우선순위는 절대값을 비교하는게 아니라 상대적이기 때문에 1,2로 하나 9,10으로 하나 같은 결과가 나온다. 실행중 쓰레드의 우선순위를 변경해보는 코드 class Horizonal extends Thread { @Override public void run() { for (int i = 0; i < 300; i++) { System.out.print("-"); if (i % 50 == 0) System.out.println(); } } }// class Vertical extends Thread { @Override public void run() { for (int i = 0; i < 3..
* Thread 클래스의 static 메소드인 sleep()메소드는 try-catch문 안에서만 사용할 수 있음. 예외처리를 필수로 하지 않아도 될 때는 RuntimeException 클래스를 상속받은 예외가 발생할 수 있는 경우일 때 이다. ex) NullPointerException 은 RuntimeException 을 상속받았기 때문에 try-catch를 필수적으로 해주지 않아도 된다. 반대의 경우로 InterruptedException은 RuntimeException을 상속받지 않았음 코드 class Big implements Runnable { @Override public void run() { // 대문자 A ~ Z 출력 for (char i = 'A'; i
* 쓰레드를 사용함으로써 얻는 효과 쓰레드를 사용하지 않고 서브 메소드를 호출하면 서브 메소드의 작업이 끝날 때 까지 다음 라인으로 넘어가지 않는다. 반면, 서브 메소드를 쓰레드 방식으로 호출하면 서브 메소드는 이거대로 돌아가고 메인 메소드도 이거대로 멈추지 않고 돌아간다. 따라서 cpu의 사용률을 향상시킬 수 있다. * 특정 메소드를 쓰레드 방식으로 실행시키는 두 가지 방법(공식처럼 암기해두는게 좋음) 1) 첫번째 방법 1. Runnable 인터페이스를 상속받는 클래스를 하나 만들고, 상속받은 미완성 메소드 run()을 오버라이딩하여 완성시켜줌 2. 1번에서 생성한 클래스의 객체를 생성 3. 2에서 생성한 객체를 가리키는 참조변수를 넘겨받아 Thread 클래스의 객체를 생성 4. 3에서 생선한 객체를 ..
* HashMap클래스란? Map 인터페이스를 구현하여 만들어진 클래스로, (key, value)의 페어가 1개의 원소이며 Map의 특징을 그대로 상속받아 key는 중복이 없고, value는 중복 데이터는 존재가 가능하다. 순서(index)는 없다는 점에서 Set과 비슷함. 중복되는 key가 존재할 수 없어, key값이 같은 pair를 넣으려고 하면 기존의 것을 덮어씌워버린다. * HashMap에서 자주 사용되는 메소드 HashMap hm = new HashMap(); hm.put(key객체, value객체);// key객체-value객체 페어 추가 hm.get(key객체);// key객체에 해당하는 value객체 반환 hm.containsKey(key객체)// key객체 존재여부 true/false 반..