목록개발/java (10)
파파비의 블로그
Arrays 나 Collections 에는 .sort라는 메소드가 붙어 있다. 우리는 여기에 int[] 처럼 이런 배열들을 넣고 sort를 진행한다. JAVA API문서를 살펴보면 sort의 성능은 merge sort급으로, n log n 의 속도를 자랑해서 매우 빠르다. 그런데 문제가 있다 우리가 만든 객체를 sort하고 싶으면 어떻게 하지? sort 관련 알고리즘을 직접짜서 돌려야 하나...? 정답은 NO~ 그런것들은 java가 알아서 해줄테니 기준만 정해서 알려주면 된다. 1) Comparable 우리가 어떤 class를 만들거나 어떤 객체를 저 collections의 sort 메소드를 통해 정렬을 시키고 싶다면 Comparable 인터페이스를 구현하면된다. 구현은 저 compareTo 메소드만 하..
기본스트림을 활용하면 불편한 점들이 많다. 먼저 항상 전송되는 data는 byte로 변환해야하는 불편함도 있고, 보안 등의 이슈도 생실 수 있다. 그래서 필터스트림이라는 것이 있다. 필터스트림은 직접적인 in/out 기능은 없다 기본 스트림에 필터를 붙이듯 기능이 추가된 스트림이다. (기본 스트림은 데이터의 송수신만 가능하기 때문이다.) 필터스트림을 사용하는 방법은 먼저 기본스트림 객체를 만들고, 필터스트림 객체를 만들 때 기본스트림을 넣으면 된다. 필터스트림은 data를 출력할 때, 우리가 굳이 byte로 안바꾸게 할 수도 있고, 보안을 유지하게끔 암호화를 해줄 수 도 있다. 필터스트림의 종류는 다양하며 filterstream을 상속하는 것들을 필터스트림이라고 한다. 코드를 통해 확인해보자 //먼저 t..
우리는 프로그램 내부에서 데이터를 사용할 때, 변수를 만들어서 저장하거나 클래스를 만드는 등의 방법을 사용한다. 그러나 프로그램 외부의 데이터를 사용할 때는 어떻게 할까? 가장 기본적인 방법으로 자바에선 stream이라는 도구를 사용한다. stream에는 기본스트림이라는 것이 있다. inputstream, outputstream을 직접 상속 받은 것으로 입출력 기능을 갖고 있는 클래스들을 의미한다. 그외 필터스크린을 상속받은 것들은 inputstream, outputstream을 객체로 받아서 사용할 수 있다. 기본스트림은 데이터를 주고 받을 때 바이트 형태로해서 주고받을 수 있다. FileOutputStream - 프로그램에서 파일로 데이터를 전송할 때 사용하는 스트림이다. - 데이터를 보내고자 하는 ..
예외 class의 가장 상위는 Exception 클래스이다. Exception은 크게 2개로 나눌 수 있다. Exception과 RuntimeException이다. RuntimeException은 Exception을 상속한 exception인데, 이 예외를 발생시키는 것들은 코딩단계에서 예외처리가 필수는 아니다. 반대로 Exception을 바로 상속한 class들, RuntimeException을 상속하지 않은 Exception들은 예외처리를 필수로 요구된다. 그렇다면 예외를 처리는 어떻게 할까? 하는 방법이 2가지가 있다. try-catch를 통해 직접처리하는 방법과 throws를 통해 직접처리하지 않고 떠넘기는 방식이 있다. 먼저 try-catch부터 파악해보자 try{ //여기에는 에러가 날 수 있..
쓰레드는 끈이라는 이야기이다. 코드가 존재하면 해당 코드는 쭉 처음부터 끝까지 실행된다. 하나의 끈처럼 말이다. 그런데 예를 들어 무한루프가 있다고 가정해보자. 해당 코드는 무한루프에 걸리면 계속 삥글삥글 돌 것이다. 더 이상 내려가지 않고 말이다. 만약 무한루프를 몇 개 따로 돌리면서 진행하는 프로그램을 만들고 싶다면 어떻게 해야할까? 쓰레드라는 개념을 알고 활용하면 된다. 쓰레드는 프로세스와 비슷하지만 다르다. 프로세스는 실행되면 하나의 일정 자원과 제어를 할 수 있게 되는데, 프로세스 끼리는 자원을 공유하지 않는다. 쓰레드는 프로세스 내에서 자원을 공유하면서 제어는 나눠서 하는 구조이다. 더 깊에 알고 싶으면 OS쪽을 공부하면 된다. (나도 아직 공부중이라 깊게는 잘 모른다..) 아무튼 쓰레드에 대..
인터페이스는 추상메소드만으로 이루어져 있다. 하지만 class는 아니다. 추상메소드와 모양은 비슷하다고 느껴질 수 있다. 인터페이스는 추상메소드로만 이루어져 있지만, 굳이 메소드에 abstract를 쓸 필요는 없다. 자동으로 abstract로 인식된다. 인터페이스는 변수도 넣을 수 있다. 이때 역시 자동으로 final static으로 인식된다. 인터페이스는 보통 규격을 만들 때 사용되고, 다른말로 말하면 참조변수를 통일시킬 때 사용된다. 예를 들어서 OS에서 어떤 이벤트가 발생했을 때, 어떤 객체의 onClick 함수를 실행한다고 해보자. 인터페이스를 활용하면 이벤트가 발생했을 때 마다 다양한 함수를 활용할 수 있다. 호출되는 함수는 같지만, 내용이 매번 다른... 이것이 인터페이스의 매력이다. 말로만 ..
추상클래스라는 것은 추상메소드가 '포함'된 클래스를 의미한다. 추상클래스에는 추상메소드'만' 있는 것은 아니다. 그렇다면 추상메소드라는 것은 무엇일까? 추상메소드는 이름만 있고, 구현이 안 된 메소드이다. 구현이 됐다 안됐다의 차이는 '블록'에 있다. public void function(){ } 해당 코드는 구현이 된 메소드이다. 비록 아무 내용도 없지만 말이다. 이유는 '블록'이 설정되어 있기 때문이다. public void function(); 이 것이 추상메소드이다. 구현이되지 않은 메소드이기 때문이다. 블록대신 ';'로 처리되어 있다. 실제로 이렇게 쓰면 오류가 날 것이다. 추상메소드는 abstract라는 키워드를 붙여줘야 한다. 그래서 제대로 된 것은 abstract public void fu..
보통 클래스를 만들 때는 새로 파일을 만들어서 거기에 class 내용을 넣는다. 이런 과정이 어떻게 보면 불편할 수도 있다. 특히 새로 만들어서 한 번만 쓸 경우에는 굳이 파일까지 만들어서 하는 과정이 많이 번거롭게 느껴질 수 있다. 그럴 때는 중첩클래스의 개념을 한 번 활용해 보는게 어떨까? 중첩클래스에는 4가지가 대표적으로 있다. 1. 가장 일반적인 형태로 class안에 class를 만드는 일반 중첩 클래스 2. class안에 class를 만드는데, static class로 만드는 static 중첩 클래스 3. 메소드 안에 클래스를 만들어서 메소드 안에서만 쓰는 메소드 중첩 클래스 4. 한 번만 오버로딩해서 쓸, 익명중첩클래스가 있다. 디테일한 내용을 한 번 알아보도록 하자. 1) 일반 중첩 클래스 ..