본문 바로가기

객체지향

method overriding 과정에서 @Override annotation을 사용해야 하는 이유 method overriding(메소드 재정의)은 부모 클래스에게 method를 상속받은 자식 클래스 또는 인터페이스를 구현한 구현 클래스에서, 해당 클래스에 적합하지 않거나 별개의 작업이 필요한 부모 클래스의 메소드 실행내용을 변경해 적용하는 작업이다. 이를 통해 같은 클래스를 상속받거나 구현한 클래스 간에도 다형성을 구현할 수 있다. 또한 추상 메소드(abstract method)는 실행부가 존재하지 않으므로, 반드시 재정의가 필요하다. 어제 포스팅한 객체의 네 가지 특성 중 상속성 항목의 마지막에 @Override annotation에 대해 간략하게 언급했었다. 클래스 상속 후 메소드를 재정의할 때, 자식 클래스에서는 해당 메소드의 선언부를 부모 클래스의 메소드 선언부와 동일하게 작성해야 한다. 또.. 더보기
인터페이스의 객체지향적 특징 인터페이스는 객체와 객체를 연결해 주는 매개체이다. 앞서 포스팅한 캡슐화와 추상화, 다형성, 상속성의 특징을 모두 가지고 있다. 인터페이스는 다른 객체를 사용하려는 객체에게 해당 객체에 대한 일종의 사용설명서와 같은 역할을 한다. 인터페이스에 선언된 추상 메소드는 구현 객체에 어떤 종류의 메소드가 있는지 알려 준다(추상화). 외부 객체는 인터페이스의 추상 메소드를 통해 간접적인 방법으로 해당 객체를 호출할 수 있다(캡슐화). 따라서 구현 객체는 반드시 인터페이스(와 그 부모)의 추상 메소드를 재정의해, 실행 내용이 있는 메소드를 가져야 한다(상속성과 다형성). 이는 객체 간 상호작용의 연결성 측면에서 객체지향의 목적에 크게 부합하는 특성이다. 또한 인터페이스는 외부 객체와 구현 객체를 중개하여 알맞은 구.. 더보기
객체지향의 네 가지 특성 : 캡슐화, 추상화, 다형성, 상속성 객체지향의 핵심적인 네 가지 특성인 캡슐화와 추상화, 다형성, 상속성에 대해 정리해 보았다. 1. 캡슐화 객체지향 프로그래밍에서는 구조의 노출, 객체 외부에서의 비정상적인 접근 또는 필드 값의 잘못된 변경 등의 위험성으로부터 보호하기 위해 구성멤버를 캡슐화할 수 있다. 접근 제한자를 이용해 중요한 정보를 담고 있는 필드와 직접적인 호출이 바람직하지 않은 메소드를 보호하고, 대체 수단을 통해 외부 객체와 상호작용하게 된다. 클래스 내부에서는 항상 멤버 간 자유롭게 상호작용이 가능하지만, 외부에서는 접근 제한 등급에 따라 공개된 구성요소에만 접근할 수 있다. 이 구성요소들은 외부와의 상호작용을 매개하며 잘못된 이용을 방지해 주는 역할을 담당하게 된다. public class Encapsulation { pr.. 더보기
(객체지향 기초) Java로 계좌 관리 프로그램 만들기(2) 발생한 문제와 해결과정 Java와 객체지향 초보다 보니 기초적인 내용임에도 작업 과정에서 문제가 많이 발생했는데, 해결 과정에서 시간이 너무 오래 걸리게 되었다. 그래서 일단 그냥 넘어갔다 실력이 쌓이고 다시 풀어 보려고 했으나 생각을 바꿔 끝까지 완성하게 되었다. 넘어가면 당장의 시간은 덜 쓰겠지만, 확실히 학습하지 못한 개념은 이후의 학습 과정에 장애 요소가 되어 결과적으로 시간을 더 소모하게 될 수 있다. 다 적으면 끝도 없겠지만, 복습 과정에서 활용할 수 있도록 실행 과정에서 발생했던 문제 위주로 간략하게 적어 보겠다. nextInt() 메소드를 사용했을 때 입력창이 skip되는 문제 위와 같이 계좌번호를 입력하지 못하고 계좌 수를 입력하는 창이 바로 나오게 되는데, 검색을 통해 이게 nextIn.. 더보기
(객체지향 기초) Java로 계좌 관리 프로그램 만들기(1) 목표와 전체 소스 코드 만들고자 하는 프로그램 다음은 키보드로부터 계좌 정보를 입력받아 계좌를 관리하는 프로그램입니다. 계좌는 Account 객체로 생성되고 BankApplication에서 길이 100인 Account[ ] 배열로 관리됩니다. 실행 결과를 보고, Account와 BankApplication 클래스를 작성해보세요(키보드로 입력받을 때는 Scanner 의 nextLine ( ) 메소드를 사용). 객체는 공부했다. 그런데 Account[] 배열로 만들라 하니 전혀 감이 잡히지 않았다. 이것 때문에 고민하고 설계하는 데 투입한 시간이 절대적으로 많다. 그런 거 예제에서도 안 만들어 봤는데 바로 만들어 보라고 한다... 소스 코드 1. Account 클래스 package ch_06.practice.. 더보기