주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 다형성은 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말합니다. 코드 측면에서 보면 다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해줍니다. 다형성을 위해 자바는 부모 클래스로 타입 변환을 허용합니다. 예를 들어 자동차를 설계할 때 타이어 클래스 타입을 적용했다면 이 클래스를 상속한 실제 타이어들은 어떤 것이든 상관없이 장착(대입)이 가능합니다. 코드로 표현하면 다음과 같습니다. public class Car { Tire t1 = new HankookTire(); Tire t2..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. final 키워드는 클래스, 필드, 메서드 선언 시에 사용할 수 있습니다. final 키워드는 해당 선언이 최종 상태이고, 결코 수정될 수 없음을 뜻합니다. 그런데 final 키워드의 대상이 클래스냐 필드냐 메서드냐에 따라 해석이 조금씩 달라집니다. 필드에 대해서 어떤 의미를 가지는지는 앞서 알아보았고, 클래스와 메서드를 대상으로는 어떤 의미를 가지는지 알아보겠습니다. 상속할 수 없는 final 클래스 클래스를 선언할 때 final 키워드를 class 앞에 붙이게 되면 이 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스가 됩니..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 부모 클래스의 모든 메서드가 자식 클래스에 맞게 설계되어 있다면 가장 이상적인 상속이지만, 어떤 메서드는 자식 클래스가 사용하기에 적합하지 않을 수도 있습니다. 이 경우 상속된 일부 메서드는 자식 클래스에서 다시 수정해서 사용해야 합니다. 자바는 이런 경우를 위해 메서드 오버 라이딩(Overriding) 기능을 제공합니다. 메서드 재정의(@Override) 메서드가 오버 라이딩되면 부모 객체의 메서드는 숨겨지기 때문에, 자식 객체에서 메서드를 호출하면 오버 라이딩된 자식 메서드가 호출됩니다. 메서드를 오버 라이딩할 때는 다음과 같은..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 객체 지향 프로그램에서 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있습니다. 프로그램에서는 부모 클래스를 상위 클래스라고 부르기도 하고, 자식 클래스를 하위 클래스, 또는 파생 클래스라고 부르기도 합니다. 부모 클래스를 상속한 자식 클래스는 자신의 멤버뿐만 아니라 부모 클래스의 멤버까지도 사용할 수 있게 됩니다. 하지만 상속을 한다고 해서 부모 클래스의 모든 필드와 메서드들을 물려받는 것은 아닙니다. 부모 클래스에서 private 접근 제한을 갖는 필드와 메서드는 상속 대상에서 제외됩니다. 그리고 부모 클래스와 자식 클래스가 ..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 어노테이션은 메타데이터(metedata)라고 볼 수 있습니다. 메타데이터란 애플리케이션이 처리해야 할 데이터가 아니라, 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보입니다. 어노테이션은 다음과 같은 형태로 작성됩니다. @AnnotationName 어노테이션은 다음 세 가지 용도로 사용됩니다. 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공 실행 시(런타임 시) 특정 기능을 실행하도록 정보를 제공 (즉, 어떤..
주의 사항! 이 글은 제가 직접 공부하는 중에 작성되고 있습니다. 따라서 제가 이해하는 그대로의 내용이 포함됩니다. 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다. 일반적으로 객체 지향 프로그래밍에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막습니다. 그 이유는 객체의 데이터를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성이 깨질 수 있기 때문입니다. 예를 들어 자동차의 속도는 음수가 될 수 없는데, 외부에서 음수로 변경하면 객체의 무결성이 깨집니다. myCar.speed = -100; 이런 문제점을 해결하기 위해 객체 지향 프로그래밍에서는 메서드를 통해서 데이터를 변경하는 방법을 선호합니다. 데이터는 외부에서 접근할 수 없도록 막고 메서드만 공개해서 외부에서 메서드를 통해 ..