본문 바로가기

Language/Java

(32)
[Java] 추상 클래스 추상적이다라는 것은 구체적이지 않고 막역한 것을 뜻한다. 그렇다면 추상 클래스(abstract class)는 구체적이지 않은 클래스를 말한다. 추상 클래스는 항상 추상 메서드를 포함하는데, 추상 메서드는 구현 코드가 없다. 함수의 구현 코드가 없다는 것은 함수 몸체(body)가 없다는 뜻이다. int add(int x, int y) { return x + y; // { } 안의 내용이 함수 몸체 } 중괄호 { }로 감싼 부분을 함수의 구현부(implementation)이라 하는데, 이 부분이 없는 함수는 추상 함수(abstract function)이고, 자바에서는 추상 메서드(abstract method)라고 한다. abstract int add(int x, int y); 추상 메서드는 위와 같이 선언만..
[Java] 다운 캐스팅과 instanceof 다운 캐스팅 : 상위 클래스로 형 변환되었던 하위 클래스를 다시 원래 자료형으로 형 변환하는 것 다운 캐스팅을 하기 전에 상위 클래스로 형 변환된 인스턴스의 원래 자료형을 확인해야 변환할 때 오류를 막을 수 있다. 이를 확인하는 예약어가 instanceof이다. Animal hAnimal = new Human(); if(hAnimal instanceof Human) { // hAnimal 인스턴스 자료형이 Human형이라면 Human human = (Human)hAnimal; // 인스턴스 hAnimal을 Human형으로 다운캐스팅 } 위처럼 사용이 가능한데, 코드에서 사용한 참조 변수 hAnimal은 원래 Human형으로 생성되었다가, Animal형으로 형 변환되었다. instanceof 예약어는 왼쪽..
[Java] 다형성 활용하기 앞에서 공부한 상속과 다형성을 활용하면 프로그램을 유지 보수하는데 매우 편리하다. 이때 배열을 함께 사용하면 여러 하위 클래스 자료형을 상위 클래스 자료형으로 한꺼번에 관리할 수도 있다. 일반 고객과 VIP 고객의 중간 등급 만들기 예제 시나리오 고객이 늘어 VIP 고객만큼 물건을 많이 구매하지는 않지만, 그래도 단골인 분들에게 혜택을 주고 싶다. 그래서 GOLD 고객 등급을 하나 추가한다. GOLD 고객 혜택은 다음과 같다. ● 제품을 살 때는 항상 10% 할인해 준다. ● 보너스 포인트를 2% 적립해 준다. ● 담당 전문 상담원은 없다. [실습] 새로운 고객 등급 추가하기 package polymorphism; public class GoldCustomer extends Customer { doubl..
[Java] 다형성(polymorphism) 다형성이란 하나의 코드가 여러 자료형으로 구현되어 실행되는 것을 말한다. 즉 같은 코드에서 여러 실행 결과가 나오는 것이다. [실습] 다형성 테스트하기 package polymorphism; class Animal { public void move() { System.out.println("동물이 움직입니다."); } } class Human extends Animal { public void move() { System.out.println("사람이 두 발로 걷습니다."); } } class Tiger extends Animal { public void move() { System.out.println("호랑이가 네 발로 뜁니다."); } } class Eagle extends Animal { publ..
[Java] 메서드 오버라이딩 이전에 상속을 공부하면서 만든 상위 클래스 Customer에는 제품 가격을 계산하는 calcPrice() 메서드가 이미 정의되어 있다. 이 메서드는 정가를 그대로 지불하지만, VIP 고객은 정가에 10%를 할인받을 수 있다. 이러한 경우 상위 클래스에서 정의한 calcPrice() 메서드를 하위 클래스에서 구현할 내용과 맞지 않을 경우 하위 클래스에서 이 메서드를 재정의할 수 있는데 이를 메서드 오버 라이딩(method overriding)이라 한다. 오버 라이딩하려면 반환형, 메서드 이름, 매개변수 개수, 매개변수 자료형이 반드시 같아야 한다. 그렇지 않으면 자바 컴파일러는 재정의한 메서드를 기존 메서드와 다른 메서드로 인식한다. [실습] calcPrice() 메서드 재정의하기 package inher..
[Java] 상속에서 클래스 생성과 형 변환 하위 클래스가 생성될 때는 상위 클래스의 생성자가 먼저 호출된다. 하위 클래스가 생성되는 과정 상속된 하위 클래스가 생성되는 과정을 다시 살펴보기 위해 Customer와 VIPCustomer 클래스에 생성자 출력문 추가하여 출력 결과를 확인해본다. [실습] 상속에서 클래스 생성 과정 (1) package inheritance; public class Customer { // 멤버 변수 protected int customerID; // 고객 아이디 protected String customerName; // 고객 이름 protected String customerGrade; // 고객 등급 int bonusPoint; // 보너스 포인트 double bonusRatio; // 적립 비율 // 디폴트 생성..
[Java] 상속이란? 객체 지향 프로그래밍의 중요한 특징 중 하나가 상속(inheritance)이다. B 클래스가 A 클래스를 상속받으면 B 클래스는 A 클래스의 멤버 변수와 메서드를 사용할 수 있다. 객체 지향 프로그램은 유지보수가 편하고 프로그램을 수정하거나 새로운 내용을 추가하는 것이 유연한데, 그 기반이 되는 기술이 바로 상속이다. 자바 문법으로 상속을 구현할 때는 extends 예약어를 사용한다. A가 가지고 있는 속성이나 기능을 추가로 확장하여 B 클래스를 구현한다는 뜻으로 사용하는 것이다. class B extends A { } 상속을 사용하여 고객 관리 프로그램 구현하기 👉[실습] Customer 클래스 구현하기 package inheritance; public class Customer { // 멤버 변수 p..
[Java] ArrayList 클래스 사용하기 배열을 사용하는 중에는 배열 길이를 변경할 수 없기 때문에 코드를 수정해야 하는데 코드를 수정하는 일은 상당히 번거롭다. 자바는 객체 배열을 좀 더 쉽게 사용할 수 있도록 객체 배열 클래스 ArrayList를 제공한다. ArrayList 클래스는 객체 배열을 관리할 수 있는 멤버 변수와 메서드를 제공하므로 사용 방법만 알아두면 편리하게 사용할 수 있다. 메서드 설명 boolean add(E e) 요소 하나를 배열에 추가한다. E는 요소의 자료형을 의미한다. int size() 배열에 추가된 요소 전체 개수를 반환한다. E get(int index) index 위치에 있는 요소 값을 반환한다. E remove(int index) 배열의 index 위치에 있는 요소 값을 제거하고 그 값을 반환한다. bool..