본문 바로가기

자바의 정석

(12)
내부 클래스 내부 클래스는 클래스 내에 선언된 클래스로 두 클래스가 서로 긴밀한 관계에 있을 때 이러한 방식을 사용한다. 이렇게 내부 클래스를 선언하면 2가지의 장점이 존재한다. - 내부 클래스에서 외부 클래스의 멤버들에 쉽게 접근할 수 있다. - 코드의 복잡성을 줄일 수 있다.(캡슐화) class A{ // 외부 클래스 class B{ // 내부 클래스 } } 이 때 내부 클래스 B는 외부 클래스인 A를 제외하고는 다른 클래스에서 잘 사용되지 않는 것이어야 한다. 내부 클래스의 종류와 특징 내부 클래스의 종류는 변수의 선언위치에 따른 종류와 같다. 내부 클래스는 변수를 선언하는 것과 같은 위치에 선언할 수 있으며, 변수의 선언 위치에 따라 인스턴스 변수, 클래스 변수, 지역 변수로 구분되는 것과 같이 내부 클래스도..
인터페이스 인터페이스는 일종의 추상클래스라고 볼 수 있다. 추상클래스처럼 추상 메소드를 갖지만 추상화 정도가 추상클래스보다 높아서 추상클래스와 달리 몸통을 가진 일반 메소드와 멤버변수를 가질 수 없다. 오직 추상 메소드와 상수만을 멤버로 가질 수 있으며, 다른 클래스를 작성하는데 도움을 줄 목적으로 작성된다. 인터페이스의 작성 인터페이스를 작성하는 것은 키워드를 class 대신 interface를 사용한다는 것 외에는 클래스와 같다. 또한 접근제어자로 public와 default를 사용할 수 있다. 인터페이스에는 모든 멤버변수는 public static final이어야 하며, 모든 메소드는 public abstract이어야 한다는 제약사항이 있지만 이들은 생략이 가능한 부분이다. 그 이유는 인터페이스에 정의된 모든..
추상 클래스 추상 클래스는 미완성 메소드를 포함하고 있는 클래스로, 인스턴스를 생성할 수는 없으며, 상속을 통해서 자손 클래스에 의해서만 완성될 수 있다. 추상 클래스 자체는 클래스로서의 역할을 다 하지는 못하지만, 새로운 클래스 작성에 있어서 바탕이 되는 조상 클래스로 중요한 의미를 가진다. 새로운 클래스 작성에 있어서 틀을 갖추고 시작할 수 있도록 해주는 것이다. abstract class 클래스명{ } 추상 클래스의 형태는 위와 같고, 추상 메스드를 포함하고 있다는 것을 제외하면 일반 클래스와 다를 것 없이 생성자가 있으며, 멤버변수와 메소드도 가질 수 있다. 추상 메소드 원래 메소드는 선언부와 내용이 있는 구현부로 되어있지만, 추상 메소드의 형태는 선언부만 있고, 구현무는 존재하지 않는다. 이러한 미완성 상태..
다형성 객체지향개념에서 다형성이란 '여러가지 형태를 가질 수 있는 능력'을 의미하며, 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. 즉, 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 했다는 뜻이다. 조상클래스 Tv가 있고, 이를 상속받는 자손클래스 CaptionTv가 있다고 했을 때, 평소에 이 두 클래스의 인스턴스를 생성하고 사용하기 위해서는 Tv c = new Tv(); 또는 CaptionTv c = new CaptionTv(); 위와 같은 방식으로 인스턴스의 타입과 일치하는 타입의 참조변수만 사용했다. 이처럼 인스턴스의 타입과 참조변수의 타입이 일치하도록 하는 것이 보통이지만 위의 두 클래스처럼 서로가 상속관계에 ..
제어자 제어자는 변수 또는 메소드의 선언부에 함께 사용되어 부가적인 의미를 부여하며, 크게 접근 제어자와 그 외의 제어자로 나눌 수 있다. 접근제어자에는 public, protected, default, private 4가지가 있으며, 하나의 대상에 대해서 하나의 접근 제어자만 사용 가능하다. static 클래스변수(static 멤버 변수)는 하나의 변수를 모든 인스턴스가 공유하기 때문에 인스턴스에 관계없이 모두 같은 값을 갖는다. static이 붙은 멤버변수, 메소드, 초기화 블럭은 인스턴스를 생성하지 않고도 사용이 가능하다. ----- 사용 가능한 곳 : 멤버변수, 메소드, 초기화 블럭 멤버변수 - 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다. - 클래스변수는 인스턴스를 생성하지 않고도 사용이 가능..
package와 import 패키지 패키지는 클래스의 묶음으로 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들끼리 묶어 효율적으로 관리할 수 있다. 또한 같은 이름의 클래스들이라도 다른 패키지에 각각 존재하는 것은 가능하다. 클래스의 이름은 보이지는 않지만 패키지명이 함께 묶여있는 것으로 같은 이름의 클래스는 패키지 이름을 통해서 구분이 가능하다. - 하나의 소스파일에서는 첫 번째 문장으로 단 한 번의 패키지 선언만 가능 - 모든 클래스는 반드시 하나의 패키지에 속해야 함 - 패키지는 .을 구분자로 하여 계층 구조로 구성 가능 (예 - java.lang.String) - 패키지는 물리적으로 클래스 파일(.class)를 포함하는 하나의 디렉토리 패키지의 선언 package 패키지명; 패키지명은 대소문자 모두 허용하..
오버라이딩 오버라이딩 조상 클래스로부터 상속받은 메소드의 내용을 변경하는 것을 오버라이딩이라고 한다. 오버라이딩은 위와 같은 형태로 이루어진다. 오버라이딩의 조건 오버라이딩은 메소드의 내용만 새로 작성하는 것이며, 선언부는 조상클래스와 완전히 일치해야 한다. 따라서 오버라이딩이 성립하기 위해서는 아래의 조건이 필요하다. 조상클래스의 메소드와 - 이름이 같아야 한다. - 매개변수가 같아야 한다. - 반환타입이 같아야 한다. 단 접근 제어자와 예외는 제한된 조건 하에서만 다르게 변경이 가능하다. - 접근제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다 (조상의 메소드가 protected라면 오버라이딩하는 자손 메소드는 protected 혹은 public이어야만 한다.) - 예외는 조상 클래스의 메소드보다 ..
상속 상속의 정의와 장점 상속이란 기존의 클래스를 재사용해 새로운 클래스를 작성하는 것으로, 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 상속의 방법은 매우 간단하며 class Child extends Parent{}와 같이 새로 작성하려는 클래스 뒤에 extends와 상속 받으려는 클래스의 이름을 써주면 된다. 자손클래스는 조상클래스의 모든 멤버를 상속받기 때문에, Child 클래스의 멤버는 Parent 클래스의 멤버들을 포함한다고 볼 수 있다. 만약 Parent클래스에 int age 멤버 변수가 추가된다면 자손클래스인 Child에도 int age 멤버변수가 자동으로 추가된다. 하지만 반대로 Child에 멤버변수가 추가되어도 이 멤버변수는 조상 클래스인 Parent에는 어..