본문 바로가기

분류 전체보기100

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.
Getter, Setter 메소드 일반적으로 객체 지향 프로그래밍에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막는다. 그 이유는 객체의 데이터를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성이 깨질 수 있기 때문이다. 이러한 문제점을 해결하기 위해 객체 지향 프로그래밍에서는 메소드를 통해 데이터를 변경하는 방법을 선호한다. 메소드는 매개변수 값을 검증해서 유효한 값만 데이터로 저장할 수 있기 때문에 외부에서 데이터에 접근 하는 것은 막고 메소드는 공개해서 외부에서는 메소드를 통해 데이터에 접근하도록 유도하는 것이다. 이렇게 데이터의 값을 유요한 값으로 설정할 수 있도록 접근시켜주는 메소드가 Setter 메소드이다. void setSpeed(double speed) { if(speed < 0){ this.speed = .. 2020. 3. 31.
import문 같은 패키지 안에 있는 클래스는 아무 조건없이 사용할 수 있지만 다른 패키지에 있는 클래스를 사용하려면 import로 패키지와 클래스를 불러와야한다. package com.mycompany; import com.hyundai.Car; public class Company { Car car = new Car(); } 근데 간혹 패키지 전체를 입력해서 클래스를 사용해야 하는 경우가 있다. 서로 다른 패키지에 있지만 클래스 이름이 같은 경우이다. sec.exam.hankook.Tire tire1 = new sec.exam.hankook.Tire(); sec.exam.kumho.Tire tire2 = new sec.exam.kumho.Tire(); 2020. 3. 31.