분류 전체보기255 [3주차] Java 중급 - 추상 클래스의 의미와 구현하는 방법 추상 클래스란? // 예시 int add(int x, int y); // 선언 이렇게 선언만 하면 추상 메서드임 int add(int x, int y) { } // 구현부가 있음, 추상 메서드 아님 구현 코드 없이 메서드의 선언만 있는 추상 메서드 (abstract method)를 포함한 클래스 메서드 선언 (declaration) : 반환타입, 메서드 이름, 매개변수로 구성 메서드 정의 (definition) : 메서드 구현 (implementation)과 동일한 의미 구현부(body)를 가짐({ }) abstract 예약어를 사용 추상 클래스는 new 할 수 없음 (인스턴스화 할 수 없음) 추가적으로 추상클래스의 반대는 concrete class (구체적 클래스)이다. 추상 클래스 구현하기 메서드에 .. 2023. 6. 25. [3주차] Java 중급 - 다운 캐스팅과 instanceof 다운 캐스팅 (downcasting) Customer vc = new VIPCustomer(); // 묵시적 VIPCustomer vCustomer = (VIPCustomer) vc; // 명시적 업 캐스팅된 클래스를 다시 원래의 타입으로 형 변환 (원래의 인스턴스로 돌아오는 것) 하위 클래스로의 형 변환은 명시적으로 해야 함 instanceof를 이용하여 인스턴스의 형 체크 원래 인스턴스의 형이 맞는지 여부를 체크하는 키워드 맞으면 true 아니면 false 반환 instanceof 키워드의 역할은 원래 해당 인스턴스가 검사하려는 인스턴스의 타입이었는가를 확인 예) A instanceof B : A가 B타입의 인스턴스였는가? AnimalTest.java public void testDownCasting.. 2023. 6. 25. [3주차] Java 중급 - 상속은 언제 사용할까 코드의 재사용과 관련해서 2가지 방법을 사용할 수 있다. IS-A 관계 (is a relationship : inheritance) 일반적인 (general) 개념과 구체적인 (specific) 개념과의 관계 상위 클래스 : 하위 클래스보다 일반적인 개념 (예 : Employee) 하위 클래스 : 상위 클래스보다 구체적인 개념들이 더해짐 (예 : Engineer, Manager … ) 상속은 클래스간의 결합도가 높은 설계 상위 클래스의 수정이 많은 하위 클래스에 영향을 미칠 수 있음 계층 구조가 복잡하거나 hierarchy가 높으면 좋지 않음 (상속의 depth가 깊은 경우) HAS-A 관계 (composition) 클래스가 다른 클래스를 포함하는 관계 (변수로 선언) 코드 재사용의 가장 일반적인 방법 .. 2023. 6. 25. [3주차] Java 중급 - 다형성과 다형성을 사용하는 이유 다형성(polymorphism)이란? 하나의 코드가 여러 자료형으로 구현되어 실행되는 것 같은 코드에서 여러 다른 실행 결과가 나옴 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나임 다형성을 잘 활용하면 유연하고 확장성있고, 유지보수가 편리한 프로그램을 만들 수 있음 다형성의 예 package ch03; import java.util.ArrayList; class Animal{ public void move() { System.out.println("동물이 움직입니다."); } public void eating() { } } class Human extends Animal{ public void move() { System.out.println("사람이 두발로 걷습니다."); } p.. 2023. 6. 25. [3주차] Java 중급 - 메서드 재정의와 가상 메서드 원리 메서드는 어떻게 호출되고 실행 되는가? 메서드(함수)의 이름은 주소값을 나타냄 (그럼에도 overloading이 가능한 이유는 dummy parameter를 붙여서 이름을 조금씩 변형시켜서 가능하게 한다. 사실상 같은 이름의 함수는 없음) 메서드는 명령어의 set이고 프로그램이 로드되면 메서드 영역(코드 영역)에 명령어 set이 위치 해당 메서드가 호출되면 명령어 set이 있는 주소를 찾아 명령어가 실행됨 (함수가 호출되는 것은 instruction set 부분이 호출되는 것임) 이때 메서드에서 사용되는 변수들은 스택 메모리에 위치 하게됨 따라서 다른 인스턴스라도 같은 메서드의 코드는 같으므로 같은 메서드가 호출됨 인스턴스가 생성되면 변수는 힙 메모리에 따로 생성되지만, 메서드 명령어 set은 처음 한번.. 2023. 6. 25. [3주차 Java 중급] - 메서드 재정의 하기(overriding) 하위 클래스에서 메서드 재정의 하기 오버라이딩(overriding) : 상위 클래스에 정의된 메서드의 구현 내용이 하위 클래스에서 구현할 내용과 맞지 않는 경우 하위 클래스에서 동일한 이름의 메서드를 재정의 할 수 있음 (상위 클래스의 정의 구현 부분이 동일해야함. 예를 들면, 함수 이름, 파라미터, 리턴값 같은 것들...) VIPCustomer 클래스의 calcPrice()는 할인율이 적용되지 않음 재정의 하여 구현해야 함 VIPCustomer.java @Override public int calcPrice(int price) { bonusPoint += price*bonusRatio; return price - (int)(price * salesRatio); } @Overriding 애노테이션(ann.. 2023. 6. 25. [3주차] Java 중급 - 상속에서 클래스 생성 과정과 형 변환 하위 클래스가 생성되는 과정 하위 클래스를 생성하면 상위 클래스가 먼저 생성됨 new VIPCustomer()를 호출하면 Customer() 가 먼저 호출됨 (상위 클래스가 먼저 호출됨) 클래스가 상속 받은 경우 하위 클래스의 생성자에서는 반드시 상위 클래스의 생성자를 호출함 Customer.java public Customer() { // 생성자 (일반 고객) customerGrade = "SILVER"; bonusRatio = 0.01; System.out.println("Customer() 생성자 호출"); // 생성자 안에 작성 } VIPCustomer.java public VIPCustomer() { customerGrade = "VIP"; // 오류 발생 상속받은 Customer에서 custo.. 2023. 6. 24. [3주차] Java 중급 - 상속을 활용한 멤버십 클래스 구현하기 멤버십 시나리오 회사에서 고객 정보를 활용한 맞춤 서비스를 하기 위해 일반 고객(Customer)과 이보다 충성도가 높은 우수 고객(VIPCustomer)에 따른 서비스를 제공하고자 함 물품을 구매할 때 적용되는 할인율과 적립되는 보너스 포인트의 비율이 다름 여러 멤버십에 대한 각각 다양한 서비스를 제공할 수 있음 멤버십에 대한 구현을 클래스 상속을 활용하여 구현해보기 일반 고객(Customer) 클래스 구현 고객의 속성 : 고객 아이디, 고객 이름, 고객 등급, 보너스 포인트, 보너스 포인트 적립비율 일반 고객의 경우 물품 구매 시 1%의 보너스 포인트 적립 package ch03; public class Customer { private int customerID; //고객의 아이디는 중요 정보이기 .. 2023. 6. 24. [3주차] Java 중급 - 객체 간의 상속은 어떤 의미일까 클래스 상속 새로운 클래스를 정의 할 때 이미 구현된 클래스를 상속(inheritance) 받아서 속성이나 기능을 확장하여 클래스를 구현함 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할 때 기존 클래스를 상속함 상속하는 클래스 : 상위 클래스, parent class, base class, super class 상속받는 클래스 : 하위 클래스, child class, derived class, subclass // 상속의 문법 -> 자바는 단일 상속 (single inheritance) 만을 지원함 class B extends A { // extends 키워드 뒤에는 단 하나의 클래스만 올 수 있음 } 상속을 구현하는 경우 상위 클래스는 하위 클래스보다 더 일반적인 개념과 기능을 .. 2023. 6. 24. [1주차] Java 중급 - 복습해봅시다(static과 싱글톤 패턴) 설명에 따른 객체를 구현하여 테스트 코드가 실행되도록 구현하기 자동차 공장이 있습니다. 자동차 공장은 유일한 객체이고, 이 공장에서 생산되는 자동차는 제작될 때마다 고유의 번호가 부여됩니다. 자동차 번호가 10001부터 시작되어 자동차가 생산될 때마다 10002, 10003 이렇게 번호가 붙도록 자동차 공장 클래스, 자동차 클래스를 구현하세요. 다음 CarFactoryTest.java 테스트 코드가 수행 되도록 합니다. 객체 → 자동차 공장 public class CarFactoryTest { public static void main(String[] args) { CarFactory factory = CarFactory.getInstance(); // static의 CarFactory의 instance.. 2023. 6. 24. [1주차] Java 중급 - static 응용 - 싱글톤 패턴(singleton pattern) 싱글톤 패턴이란? 프로그램에서 인스턴스가 단 한개만 생성되어야 하는 경우 사용하는 디자인 패턴 static 변수, 메서드를 활용하여 구현할 수 있음 싱글톤 패턴으로 회사 객체 구현하기 생성자는 private으로 선언 private Company() {} 클래스 내부에 유일한 private 인스턴스 생성 private static Company instance = new Company(); 외부에서 유일한 인스턴스를 참조할 수 있는 public 메서드 제공 public static Company getInstance() { if(instance == null){ instance = new Company(); } return instance; } CompanyTest.java public class Comp.. 2023. 6. 24. [1주차] Java 중급 - static 메서드의 구현과 활용, 변수의 유효 범위 static 메서드 만들기 - serialNum 변수를 private으로 선언하고 getter/setter 구현 Employee.java package ch16; public class Employee { private static int serialNum = 1000; private int employeeId; private String employeeName; private String department; public Employee() { serialNum++; employeeId = serialNum; } public static int getSerialNum() { return serialNum; } public int getEmployeeId() { return employeeId; } pu.. 2023. 6. 24. 이전 1 ··· 11 12 13 14 15 16 17 ··· 22 다음