Java
-
13. 람다식Java 2021. 9. 21. 14:53
람다식 익명 함수를 생성하기 위한 식으로 객체지향언어보다는 함수지향 언어에 가깝다. 람다식은 단순히 메소드를 선언하는 것이 아니라 이 메소드를 가지고 있는 객체를 생성해 낸다. 자바코드가 매우 간결해진다. 람다식 → 매개 변수를 가진 코드 블록 → 익명 구현 객체 //익명구현객체 Runnable runnable = new Runnable() { public void run() {...} } //위의 익명구현 객체를 람다식으로 표현 Runnable runnable = () -> {...} 표준 API의 함수적 인터페이스 자바에서 제공되는 표준 API에서 한 개의 추상 메소드를 가지는 인터페이스들은 모두 람다식을 이용해서 익명 구현 객체로 표현이 가능하다. 자바 8부터는 함수적 인터페이스를 java.util..
-
12. 제네릭Java 2021. 9. 12. 19:49
제네릭 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있게 되었다. 제네릭은 컬렉션, 람다식, 스트림, NIO에서 널리 사용된다. 제네릭의 장점 컴파일 시 강한 타입 체크를 할 수 있다. 자바 컴파일러는 코드에서 잘못 사용된 타입 때문에 발생하는 문제점을 제거하기 위해 제네릭 코드에 대해 강한 타입 체크를 한다. 실행 시 타입 에러가 나는 것보다는 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지하는 것이 좋다. 타입 변환(Casting)을 제거한다. 비제네릭 코드는 불필요한 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미친다. //제네릭 타입의 객체 생성 //연산자를 사용해서 간단히 작성할 수 있음 Product product = new Pr..
-
11. 멀티 스레드Java 2021. 9. 4. 14:15
프로세스와 스레드 운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스(process)라고 부른다. (크롬 브라우저를 두 개 실행했다면 두 개의 크롬 프로세스가 생성된 것이다.) 그렇다면 어떻게 하나의 프로세스가 두 가지 이상의 작업을 처리할 수 있을까? 바로 멀티 스레드(multi thread)에 있다. 스레드(thread)는 사전적 의미로 한 가닥의 실이라는 뜻인데, 한 가지 작업을 실행하기 위해 순차적으로 실행할 코드를 실처럼 이어 놓았다고 해서 유래된 이름이다. 멀티 프로세스들은 운영체제에서 할당받은 자신의 메모리를 가지고 실행하기 때문에 서로 독립적이다. 따라서 다른 하나의 프로세스에서 오류가 발생해도 다른 프로세스에 영향을 미치지 않는다. 멀티 스레드는 하나의 프로세스 내부에 생성되기 때문에..
-
10. 자바 기본 API 클래스Java 2021. 8. 24. 00:37
자바 API 도큐먼트 쉽게 API를 찾아 이용할 수 있도록 문서화한 것이다. http://docs.oracle.com/javase/8/docs/api/ Java Platform SE 8 docs.oracle.com 객체 해시코드(hashCode()) 객체 해시코드란 객체를 식별할 하나의 정수값을 말한다. Object의 hashcode() 메소드는 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴하기 때문에 객체마다 다른 값을 가지고 있다. 객체의 동등 비교를 위해서는 Object의 equals() 메소드만 재정의하지 말고 hashCode() 메소드도 재정의해서 논리적 동등 객체일 경우 동일한 해시코드가 리턴되도록 해야 한다. 객체 복제 (clone()) 객체를 복제하는 이유는 원본 객체를 안전하게 보..
-
9. 자동 리소스 닫기Java 2021. 8. 21. 13:53
자동 리소스 닫기 try-with-resources를 사용하면 예외 발생 여부와 상관없이 사용했던 리소스 객체(각종 입출력 스트림, 서버 소켓, 소켓, 각종 채널)의 close() 메소드를 호출해서 안전하게 리소스를 닫아준다. FileInputStream fis = null; try{ fis = new FileInputStream("file.txt"); ... }catch(IOException e){ ... }finally{ if(fis != null){ try{ fis.close(); }catch(IOException e) {} } } 위의 코드를 아래처럼 간단하게 수정할 수 있다. //FileinputStream이 java.lang.AutoCloseable 인터페이스를 구현하고 있어야 한다. try(..
-
8. 인터페이스Java 2021. 8. 18. 23:53
인터페이스 인터페이스는 객체의 사용 방법을 정의한 타입이다. 객체의 교환성을 높여주기 때문에 다형성을 구현하는 매우 중요한 역할을 한다. 개발 코드와 객체가 서로 통신하는 접점 역할을 한다. 인터페이스 사용 이유 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다. 인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴값이 다를 수 있다. 따라서 개발 코드 측변에서는 코드 변경 없이 실행 내용과 리턴값을 다양화 할 수 있다는 장점을 가지게 된다. 인터페이스 구성 interface RemoteControl { //상수 : 고정값, 변경불가, 초기값 꼭 지정! public int MAX_VOLUME = 10; public..
-
7. 상속Java 2021. 8. 9. 19:20
상속 객체 지향 프로그램에서 부모 클래스를 상위 클래스라 하며, 자식 클래스를 하위클래스라고 한다. 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다. 상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 코드의 중복을 줄여준다. 부모클래스에 private 접근 제한자가 붙은 것들은 상속 대상에서 제외된다. 자바는 다중 상속을 허용하지 않는다. class 자식클래스 extends 부모클래스 { super(); //부모클래스의 기본생성자 호출 } 메소드 재정의(@Override) 메소드 오버라이딩은 상속된 메소드의 내용이 자식 클래스에 맞지 않을 경우, 자식 클래스에서 동일한 메소드를 재정의하는 것을 말한다. 부모의 메소드와 동일한 시그너처(리턴 타입, 메소드 이름, 매개 변수 리스..
-
6-2. 클래스Java 2021. 8. 9. 18:49
싱글톤(Singleton) 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우가 있다. 이를 싱글톤이라 한다. 싱글톤을 만들려면 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 한다. 생성자 앞에 private 를 붙여주면 된다. public class 클래스{ //정적 필드 private static 클래스 singleton = new 클래스(); //생성자 private 클래스(){} //정적 메소드 static 클래스 getInstance(){ //외부에서 객체를 얻는 유일한 방법 return singleton; } } 접근 제한자 public : 모두 접근할 수 있다. protected : 자식클래스가 아닌 다른 패키지에 소속된 클래스는 접근불가 default : 다..