[Java 객체지향] 다형성
·
Java & Kotlin
다형성 (Polymorphism) 하나의 코드가 여러 자료형으로 구현되어 실행되는 것 같은 코드에서 다른 실행 결과가 나온다. 정보은닉, 상속과 더불어 객체지향 프로그래밍에서 가장 큰 특징 중 하나이다. 유연하고, 확장성있고, 유지보수가 쉬운 프로그램을 만들 수 있다. 상속, 오버라이딩, 오버라이딩 등을 활용해서 구현할 수 있다. 예제 코드 AnimalTest.java package ch06; class Animal{// 상위 클래스 public void move() { System.out.println("동물이 움직입니다."); } } class Human extends Animal{// 하위 클래스 1 public void move() { System.out.println("사람이 두 발로 걷습니다...
[Java 객체지향] 메서드의 재정의와 가상 메서드 원리
·
Java & Kotlin
메서드의 호출과 실행 프로그램이 메모리로 올라올 때 Data 영역과 Code 영역으로 나뉘게 된다. 이 때, Code 영역에는 method, 즉 instruction set이 저장된다. 인스턴스는 힙메모리에 따로 생성되고, instruction set은 처음 프로그램 로드시 한번만 로드된다. instruction set은 인스턴스마다 다른 기능을 제공하는 것이 아닌 동일한 기능을 제공한다. 달라지는 것은 메서드에 사용되는 스택에 저장된 멤버 변수와 힙에 저장된 인스턴스이다. 따라서 다른 인스턴스라도 메서드의 코드는 같으므로 같은 메서드를 호출한다. 함수가 호출이 되면 Code 영역에 저장된 instruction set를 찾아 호출한다. 함수의 이름은 주소로 변환되므로 같은 이름의 함수는 존재하지 않는다...
[Java 객체지향] 오버라이딩 (메서드 재정의)
·
Java & Kotlin
오버라이딩 (Overriding) 하위 클래스는 상위 클래스의 메서드를 그대로 사용할 수 있지만, 재정의하여 사용할 수도 있다. 오버로딩과 달리 메서드의 이름, 반환 타입, 매개 변수 등 정의부는 일치해야 한다. 멤버십 클래스 구현하기 ← 오버라이딩을 활용해 VIP 고객은 가격을 할인해주는 기능을 구현해보자 VIPCustomer.java calcPrice 상속받아 재정의 @Override public int calcPrice(int price) { bonusPoint += price * bonusRatio; price = (int)(price * (1 - salesRatio)); return price; } CustomerTest.java 각 인스턴스 생성하고 calcPrice(1000) 수행 Custo..
[Java 객체지향] 상속에서 클래스의 생성과정과 형변환
·
Java & Kotlin
하위 클래스 생성 과정 하위 클래스가 생성되면 상위 클래스가 먼저 생성된다. VIPCustomer 생성자가 먼저 Customer 생성자를 호출한다. Customer 생성자 public Customer() { customerGrade = "SILVER"; bonusRatio = 0.01; System.out.println("Customer() call");// Customer 생성자 호출 시 출력 메세지 } VIPCustomer 생성자 public VIPCustomer() { bonusRatio = 0.05; saleRatio = 0.1; customerGrade = "VIP"; System.out.println("VIPCustomer() call");// VIPCustomer 생성자 호출 시 출력 메세지..
[Java 객체지향] 상속 활용 (멤버십 클래스 구현)
·
Java & Kotlin
요구 사항 회사에서 고객 정보를 활용한 맞춤 서비스를 하기 위해 일반고객(Customer)과 이보다 충성도가 높은 우수고객(VIPCustomer)에 따른 서비스를 제공하고자 함 물품을 구매 할때 적용되는 할인율과 적립되는 보너스 포인트의 비율이 다름 여러 멤버십에 대한 각각 다양한 서비스를 제공할 수 있음 멤버십에 대한 구현을 클래스 상속을 활용하여 구현해보기 Customer.java default 생성자를 이용해서 등급과 보너스 비율의 초기값을 정했다. 하위 클래스인 VIPCustomer에서 바꿔줄 멤버 변수 customerGrade는 protected로 설정 나머지 private 변수들은 getter와 setter를 만들어주었다. package ch02; public class Customer { p..
[Java 객체지향] 상속
·
Java & Kotlin
이번 장부터 클래스 간 관계와 인터페이스 간 관계를 설계하는 방법에 대해 배우고 어떻게 활용하는지 알아볼 수 있다. 또 객체지향 프로그램이 왜 유지 보수가 쉽고 수정이 용이하며 확장성이 좋은지 더 구체적으로 알아볼 수 있다. 상속 (inheritance) 기존의 클래스의 기능과 속성을 다른 클래스에서 확장하여 사용하기 위함 하위 클래스에서 더 구체적인 개념과 많은 기능을 수행함 코드의 재사용 기능 (but 코드를 재사용하기 위해 무조건 상속을 하는 것은 X) 상속하는 클래스 : 상위 클래스 (parent) / 상속받는 클래스 : 하위 클래스 (child) 문법 class B extends A {} extends 뒤에 올 수 있는 클래스 개수는 하나 (단일 상속) → 모호함 x 참고로 인터페이스 뒤에는 여..
[Java 객체지향] ArrayList 활용
·
Java & Kotlin
문제 1001학번 Lee와 1002학번 Kim, 두 학생이 있습니다. Lee 학생은 국어와 수학 2과목을 수강했고, Kim 학생은 국어, 수학, 영어 3 과목을 수강하였습니다. Lee 학생은 국어 100점, 수학 50점입니다. Kim 학생은 국어 70점, 수학 85점, 영어 100점입니다. Student와 Subject 클래스를 만들고 ArrayList를 활용하여 두 학생의 과목 성적과 총점을 출력하세요 StudentTest.java 주어진 StudentTest 클래스를 봤을때, 구현해야할 것은 Student 클래스의 생성자, addSubject, showStudentInfo이다. 과목 ArrayList에 저장된 정보가 없을 때 출력되는 메세지를 확인하기 위해 studentPark 인스턴스를 추가로 생성..
[Java 객체지향] ArrayList
·
Java & Kotlin
java util 패키지에서 제공되는 ArrayList 기존의 객체 배열은 길이를 정하고 꽉 찼을 경우 크기가 더 큰 배열을 만들어서 복사했어야함 (번거로움) 배열의 요소를 추가하거나 삭제할 때 요소의 이동을 따로 구현하지 않아도 됨 객체 배열을 더 효율적으로 관리하기 위해 제공되는 클래스 주요 메서드 boolean add(E e) : 요소 하나를 배열에 추가. E는 요소의 자료형 int size() : 배열의 요소 전체 개수 반환 E get(int index) : index 위치에 있는 요소 반환 (제거는 X) E remove(int index) : index 위치에 있는 요소 제거하고 값 반환 boolean isEmpty() : 배열이 비어 있는지 여부 반환 ArrayList 클래스에 마우스 올리고 ..
[Java 객체지향] 2차원 배열
·
Java & Kotlin
다차원 배열 평면(2차원 배열) 이나 공간(3차원 배열)을 표현 선언 int[][] arr = new int[2][3]// [행 개수][열 개수] 예제코드 package ch22; public class TwoDimensionTest { public static void main(String[] args) { int[][] arr = {{1,2,3},{4,5,6,7}};// 2차원 배열 선언 및 초기화 int i, j; for (i = 0 ; i < arr.length ; i ++) {// 외부 for문 - 행 for (j = 0 ; j < arr[i].length ; j ++) {// 내부 for문 - 열 System.out.print(arr[i][j] + " "); } System.out.printl..