일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 자동형변환
- wrapper
- Java
- unboxing
- https://start.spring.io
- boxing
- maven
- start.spring.io
- 내장객체
- 빌드
- 싱글톤
- 박싱
- 인텔리제이
- 콜렉션
- Scanner
- Jenkins
- dependency
- 컬렉션
- suvlet
- 싱글턴
- 메소드
- 스프링
- bootstrap
- 무한
- 제너릭
- 제네릭
- Short
- 언박싱
- 루프
- 클래스
- Today
- Total
목록K-DigitalTraining 강의/1. Java (102)
Developer Gonie
예시코드 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 반..
* HashSet 클래스란? Set 인터페이스를 구현하여 만들어진 클래스로, 객체만을 저장 가능하며 Set의 특징을 그대로 상속받아 순서(index)가 없고, 중복 데이터의 입력이 불가능하다. ( ArrayList와 완전 반대) 중복 데이터의 입력이 불가능해 같은 값을 넣으려고 하면 에러는 안나지만 그 시도가 무시된다. 혹시라도 알고리즘 문제 해결 과정중에 중복되는 데이터를 제거하고 싶다면 이걸 사용하면 좋을거 같다. 과거에 예제를 해결하면서 중복없는 로또번호 6개를 만드는게 있었는데 이걸 활용하면 딱이다. * HashSet 에서 자주 사용되는 메소드 HashSet hs = new HashSet(); hs.add(객체);// 원소추가 hs.remove(객체);// 원소제거 hs.clear(객체);// 원..
* Vector 클래스란? ArrayList와 같이 List 인터페이스를 상속받아 완성시킨 클래스라서 순서(index)가 있고, 중복 데이터가 허용된다. * Vector에서 자주 사용되는 메소드 Vector v = new Vector(); v.size();// 길이 반환 v.add(객체);// 객체를 맨 뒤에 추가 v.get(index)// 해당 index에 위치한 객체를 반환 //확장 for문을 이용해 요소들을 출력하는 방법 for(타입 s : v) { System.out.println(s); } //Enumeration 타입을 이용해 모든 원소 출력하는 방법(ArrayList는 사용불가) Enumeration en = v.elements(); // 참조변수가 관리하는 모든 요소들을 가져와라 while..
* ArrayList 클래스란? List 인터페이스를 구현하여 만들어진 클래스로, 객체만을 저장 가능하며 List의 특징을 그대로 상속받아 순서(index)가 있고, 중복 데이터의 입력이 가능하다. * 원소들을 간편히 원하는대로 출력하고 싶은 경우 오버라이딩 해줘야 하는 메소드 ArrayList의 조상클래스로 추상클래스인 AbstractCollection이 있는데, 이 클래스가 Object로부터 상속받은 toString을 오버라이딩 해두었고 이 메소드를 ArrayList가 물려받았다. ArrayList의 toString() 메소드는 [요소1, 요소2 요소3, , , ] 형태를 만들어주며 이후에 각 요소의 toString() 메소드를 호출해 반환받은 값을 위 자리에 대치해준다. 따라서 뭔가 원하는 출력 포..