내부 클래스(Inner Class)란? 클래스 내에 선언된 클래스 내부 클래스는 두 클래스가 서로 밀접한 관계이고, 주로 한 클래스 내에서만 사용할 것이라 예상되는 클래스가 필요할 때 사용한다. 한 클래스를 다른 클래스의 내부에 선언함으로써 외부에 불필요하게 노출되는 것을 방지(캡슐화)하고, 내부 클래스가 외부 클래스의 멤버에 쉽게 접근할 수 있도록 할 수 있다. 내부 클래스의 종류 마치 변수가 선언위치에 따라 구분되듯이 각 내부 클래스도 선언된 위치에 따라 그 종류가 달라지며, 변수와 동일한 유효범위(scope)와 접근성(accessibility)을 가진다. 종류 특징 인스턴스 클래스 (Instance class) 외부 클래스의 멤버변수 선언 위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다뤄진다...
Language/Java
인터페이스(interface)란? 인터페이스는 일종의 추상 클래스로, 추상 클래스와 마찬가지로 추상 메서드를 가지지만 보다 추상화의 정도가 높기 때문에 일반적인 메서드를 멤버로 가질 수 없다. 뿐만 아니라 일반적인 멤버변수도 가질 수 없고 오직 상수만 멤버로 가질 수 있다. 따라서 추상 클래스가 일부만 완성된 '미완성 설계도'라면, 인터페이스는 밑그림만 그려져 있는 '기본 설계도'라고 할 수 있다. 또한 추상 클래스와 마찬가지로 불완전하기 때문에 그 자체로는 사용할 수 없고(인스턴스 생성 불가), 다른 클래스를 작성하는 데 도움을 주는 가이드 역할을 한다. 인터페이스 작성법 인터페이스를 작성하는 방법은 기본적으로 클래스와 동일해서 접근 제어자로 'public'과 '(default)'를 사용할 수 있고, ..
추상 클래스(abstract class)란? 클래스가 '객체의 설계도'라면, 추상 클래스 '미완성 설계도'라고 할 수 있다. 미완성된 클래스라는 것은 멤버로 미완성된 메서드(추상 메서드)를 가지고 있다는 의미이며, 그 외에는 일반적인 클래스와 차이가 없다. 추상 클래스는 추상 메서드를 가지고 있기 때문에 인스턴스를 직접 생성할 수 없으며, 자손 클래스의 상속에 의해서만 온전한 클래스로 완성될 수 있다. 하지만 추상 클래스는 조상 클래스로서 중요한 의미를 가지는데, 여러 개의 클래스가 대부분 같은 속성과 기능을 공유하지만 일부 기능에 차이가 있을 때 유용하게 사용할 수 있다. 예를 들어 자동차의 옵션에 따라 세부적인 기능은 다를 수 있지만, 기본적인 스펙이나 기능은 동일하기 때문에 유사한 설계도를 가지게 ..
다형성(polymorphism)이란? 다형성은 객체지향의 4대 핵심 개념 중 하나로, 이름 그대로 여러 가지 형태를 가질 수 있다는 의미이다. 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있게 하였는데, 다시 말해 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하여 다형성을 구현하였다. 다형성을 이해하기 위해선 상속에 대한 개념이 반드시 필요하다. 만약 상속에 대해 잘 모른다면 아래의 포스트를 참고하면 된다. 상속 상속(inheritance)이란? 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것 상속이란 객체지향의 4대 핵심 개념 중 하나로, 상속을 통해 클래스를 작성하면 보다 적은 양의 코드로 새로운 클 doshiwa-dev.tistory.com cl..
제어자(modifier)란? 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여하는 키워드 제어자는 크게 접근 제어자와 그 외의 제어자로 나눌 수 있으며, 종류는 아래와 같다. 접근 제어자: public, protected, default, private 그 외 제어자: static, final, abstract, native, transient, synchronized, volatile, strictfp 하나의 대상에 대해서 여러 제어자를 조합하여 사용할 수 있지만, 접근 제어자는 4개 중 한 개만 선택해서 사용해야 한다. static static은 '클래스의' 또는 '공통적인'이라는 의미를 가지고 있다. 때문에 모든 클래스가 공통적인 속성을 공유할 때는 static 변수를, 공통..
오버라이딩(Overriding)이란? 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것 일반적으로 새로운 클래스를 생성할 때 상속받은 메서드를 그대로 사용하기 보다는, 새로운 클래스 자신의 상황에 맞게 메서드를 변경해야 하는 경우가 많다. 이럴 때 사용하는 것이 바로 '오버라이딩'이다. class Point { int x; int y; String getLocation() { return "x: " + x + ", y: " + y; } } class Point3D extends Point { int z; String getLocation() { return "x: " + x + ", y: " + y + ", z: " + z; } } 위의 예시처럼 Point3D 클래스는 Point 클래스의 getLo..