람다식이란? 메서드를 하나의 식(expression)으로 표현한 것이다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 익명함수라고도 한다. 람다식 도입으로 인해 자바는 객체지향언어인 동시에 함수형 언어가 되었다. int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int)...
내부 클래스(inner class)
내부 클래스란? 내부 클래스는 클래스 내에 선언된 클래스이다. 클래스에 다른 클래스를 선언하는 이유는 두 클래스가 서로 긴밀한 관계에 있기 때문이다. class A { // 외부 클래스 // ... class B { // 내부 클래스 // ... } // ... } 내부클래스의 장점 내부 클래스에서 외부클래스의 맴버들을 쉽게 ...
인터페이스(interface)
인터페이스란? 인터페이스는 일종의 추상클래스이지만 일반메서드 또는 맴버변수를 가질 수 없고, 오직 추상메서드와 상수만을 맴버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용하지 않는다. 추상클래스를 미완성 설계도라고 한다면, 인터페이스는 구현된 것은 아무 것도 없고 밑그림만 그려져있는 기본 설계도라 할 수 있다. 인터페이스의 작성 클래스를...
추상클래스(abstract class)
추상클래스란? 클래스를 설계도에 비유한다면, 추상클래스는 미완성 설계도에 비유할 수 있다. 클래스가 미완성이라는 것은 맴버의 개수에 관계된 것이 아니라, 단지 미완성 메서드(추상메서드)를 포함하고 있다는 의미이다. 미완성 설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성할 수 없다. 추상클래스는 상속을 통해서 자손클래스에 의해서...
다형성(polymorphism)
다형성이란? 여러 가지 형태를 가질 수 있는 능력을 의미하며 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였고, 상속과 깊은 관계가 있다. 이를 좀 더 구체적으로 말하자면, 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다는 것이다. class Tv { b...
제어자(modifier)
제어자란? 제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자의 종류 접근제어자 public, protected, default, private 그 외 static, final, abstract, native, transient, synchronized,...
package와 import
패키지(package) 패키지란, 클래스의 묶음이다. 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다. 모든 클래스는 반드시 하나의 패키지에 속해야 한다. 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다. 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다. 패키지...
오버라이딩(overriding)
오버라이딩이란? 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것이다. 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스에 맞게 변경해야하는 경우 오버라이딩한다. class Point { int x; int y; String getLocation() { return "x :" + x + ", y :" + y; } } cl...
상속(inheritance)
상속의 정의와 장점 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 이러한 특징은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다. class Paren...
변수의 초기화
변수의 초기화 변수를 선언하고 처음으로 값을 저장하는 것을 변수의 초기화라고 한다. class InitTest { int x; // 인스턴스 변수 int y = x; // 인스턴스 변수 void method1() { int i; // 지역변수 int j = i; // 에러. 지역변수를 초기화하지 않고 사용 } ...