본문 바로가기

개발 관련 지식/JAVA37

추상 클래스 객체를 직접 생성할 수 있는 클래스를 실체 클래스 라고 하고, 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스 라고 한다. 추상 클래스와 실체 클래스는 상속 관계를 가지고 있다. 추상 클래스가 부모이고 실체 클래스가 자식이다. 추상 클래스는 클래스들의 공통적인 멤버만 추출한 것이기 때문에 객체를 생성할 수 없다. new 를 사용할 수 없고 extends 뒤에만 올 수 있다. 추상 클래스를 사용하는 이유 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적 실체 클래스를 설계하는 사람이 다수일 경우, 같은 용도의 필드와 메소드인데도 이름을 다르게 선언하라 수 있기 때문에 통일하기 위한 목적으로 사용한다. 실체 클래스를 작성할 시간을 절약 실체 클래스마다 서로 다른 점만 선언하고 공통적.. 2020. 4. 1.
다형성 다형성은 객체의 타입은 같은데 실행 결과가 다양하게 나타나는 것이다. 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다. 자바는 부모 타입에 모든 자식 객체가 대입될 수 있다. 클래스 타입의 타입 변환은 상속관계에 있는 클래스 사이에서 발생한다. 자식 타입은 부모 타입으로 자동 타입 변환이 가능하다. 자동 타입 변환은 자식 클래스는 부모 클래스를 상속받기 때문에 부모와 동일하게 취급될 수 있다는 것이다. '부모 클래스 변수 = 자식 클래스 타입' Cat 클래스가 Animal 클래스를 상속 받는다고 할 때, class Animal { .... } class Cat extends Animal { .... } Cat cat = new Cat(); Animal animal = cat.. 2020. 3. 31.
final 키워드 final 키워드는 클래스, 필드, 메소드 선언 시에 사용할 수 있다. final이 클래스 앞에 붙으면 상속이 불가능해진다. final이 메소드 앞에 붙으면 오버라이딩이 불가능 해진다. final이 필드에 붙으면 필드 초기값 이후로 변경할 수 없게 된다. 2020. 3. 31.
메소드 재정의 Overriding 부모 클래스에서 상속된 메소드를 자식 클래스에서 변경해서 사용하는 것. 메소드가 오버라이딩되었다면 부모 객체의 메소드는 숨겨지기 때문에, 자식 객체에서 메소드를 호출하면 오버라이딩된 자식 메소드가 호출된다. 메소드 오버라이딩에는 규칙이 있다. 부모 메소드와 동일한 리턴 타입, 메소드 이름, 매개변수 리스트를 가져야 한다. 접근제한을 부모 메소드보다 강하게 바꿀 수 없다. 새로운 예외를 throws할 수 없다. 오버라이딩에 대해 예시를 보자. // Calculator.java public class Calculator { double areaCircle(double r) { return 3.14 * r * r; } } // Computer.java public class Computer extends Ca.. 2020. 3. 31.
상속 상속을 해도 부모 클래스의 모든 필드와 메소드들을 물려받는 것은 아니다. 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외된다. 그리고 부모 클래스와 자식 클래스가 서로 다른 패키지에 있으면 default 접근 제한을 갖는 필드와 메소드도 상속 되지 않는다. 프로그램에서는 자식이 어떤 부모 클래스를 상속 받을지 결정한다. // CellPhone.java public class CellPhone { String model; String color; void bell(){ System.out.println("벨이 울린다"); } public class SmartPhone extends CellPhone { // 필드 double channel; // 생성자 SmartPhon.. 2020. 3. 31.
어노테이션 어노테이션은 메타데이터라고 볼 수 있다. 메타데이터는 애플리케이션이 처리해야 할 데이터가 아니라, 컴파일 과정과 실행과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보이다. 어노테이션은 세 가지 용도로 사용된다. 컴파일러에게 코드 문법 에러를 체크하도록 정보 제공 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공 실행(런타임) 시 특정 기능을 실행하도록 정보 제공 어노테이션은 @interface를 사용해서 정의한다. public @interface AnnotationName { } 정의한 어노테이션은 @AnnotationName 으로 사용한다. 어노테이션은 element를 가질 수 있다. 엘리먼트는 타입과 이름으로 구성되고, 디폴트 값을 선택적으로 가질 수 있.. 2020. 3. 31.