레퍼런스 타입에 대하여 열거 타입의 선언과 이용

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
10. 예외 처리.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
JAVA 클래스와 멤버 2014년 4월 2일 19:00 손은경 강원대학교 데이터베이스 연구실 강원대학교 데이터베이스 연구실.
제 08 장 자바 빈즈 학기 인터넷비즈니스과 강 환수 교수.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
직렬화와 역직렬화에 대하여 직렬화 가능 클래스의 선언 방법
제 5 장 상속과 다형성.
명품 JAVA Essential.
Chapter 4. 클래스와 객체 PS Lab. 이지연.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
Lesson 9. 예외처리.
Lesson 6. 형변환.
5장. 참조 타입.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
23장. 구조체와 사용자 정의 자료형 2.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
3장 자바의 기본문법(2).
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
Chap.10 자바 컴파일링의 안쪽 PS Lab. 이지연.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
상속과 인터페이스 클래스의 상속에 대하여 인터페이스에 대하여.
10장. 예외처리.
자바 5.0 프로그래밍.
C#.
6장 클래스 6.1 클래스의 일반 구조 6.2 클래스 선언 6.3 객체의 생성 6.4 멤버 변수 6.5 멤버변수 접근 한정자
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Java 9장. 인터페이스와 예외처리 public class SumTest {
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Lesson 4. 수식과 연산자.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Effective Java [Issue 1 and 2]
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
Chapter 02. 자바 기본 문법.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
C++ Espresso 제11장 예외 처리와 형변환.
JA A V W. 06.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
[ 단원 04 ] 반복과 배열.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
발표자 : 이지연 Programming Systems Lab.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
7 생성자 함수.
3장 자바의 기본문법(2).
Presentation transcript:

레퍼런스 타입에 대하여 열거 타입의 선언과 이용

레퍼런스 타입 01. 레퍼런스 타입 레퍼런스 타입이란? • 자바의 데이터 타입 분류 체계

레퍼런스 타입 01. 레퍼런스 타입 레퍼런스 값에 대하여 • 프리미티브 타입과 레퍼런스 타입의 대입문 처리

레퍼런스 타입 01. 레퍼런스 타입 참조 값과 데이터 • 레퍼런스 변수를 또 다른 레퍼런스 변수에 대입할 때 일어나는 일

01. 레퍼런스 타입 레퍼런스 타입 참조 값과 데이터 [예제 7-1] 평면 위의 점을 표현하는 클래스 1 2 3 4 5 6 7 class Point { int x, y; // 필드 Point(int x, int y) { // 생성자 this.x = x; this.y = y; }

01. 레퍼런스 타입 레퍼런스 타입 참조값과 데이터 [예제 7-2] 하나의 객체를 두 개의 변수에 대입하는 프로그램 1 2 3 4 5 6 7 8 9 10 11 class RefTypeExample1 { public static void main(String args[]) { Point obj1 = new Point(10, 20); Point obj2 = obj1; System.out.printf("obj1 = (%d, %d) %n", obj1.x, obj1.y); System.out.printf("obj2 = (%d, %d) %n", obj2.x, obj2.y); obj2.x = 30; } 하나의 객체를 생성해서 두 개의 변수에 대입 obj1, obj2의 x, y 필드 값 출력 obj2의 x 필드에 다른 값 대입

레퍼런스 타입 01. 레퍼런스 타입 레퍼런스 타입의 파라미터 • 레퍼런스 타입의 파라미터를 메소드에 넘겨줄 때 일어나는 일

01. 레퍼런스 타입 레퍼런스 타입 레퍼런스 타입의 파라미터 [예제 7-3] 레퍼런스 타입 파라미터를 메소드 안에서 수정하는 예 1 2 3 4 5 6 7 8 9 10 11 12 class RefTypeExample2 { public static void main(String args[]) { Point obj = new Point(10, 20); System.out.printf("(%d, %d) %n", obj.x, obj.y); rearrange(obj); } static void rearrange(Point point) { point.x = 30; point.y = 40; 호출 파라미터 변수의 필드에 다른 값을 대입

레퍼런스 타입 01. 레퍼런스 타입 null 참조값 • null 참조값 : 아무 데이터도 가리키지 않는 참조값

레퍼런스 타입 01. 레퍼런스 타입 null 참조값 [예제 7-4] 아무 값도 갖지 않는 레퍼런스 변수와 null 값을 갖는 레퍼런스 변수 class RefTypeExample3 { public static void main(String args[]) { Point obj; System.out.println(obj.x); System.out.println(obj.y); } class RefTypeExample4 { public static void main(String args[]) { Point obj = null; System.out.println(obj.x); System.out.println(obj.y); }

레퍼런스 타입 01. 레퍼런스 타입 null 참조값 [예제 7-5] 레퍼런스 변수를 null 참조값과 비교해서 처리하는 프로그램 1 2 3 4 5 6 7 8 9 10 11 class RefTypeExample5 { public static void main(String args[]) { Point obj = null; if (obj == null) { System.out.println("obj 변수가 가리키는 객체가 없습니다"); return; } System.out.println("x = " + obj.x); System.out.println("y = " + obj.y);

01. 레퍼런스 타입 레퍼런스 타입 변수의 타입과 객체의 타입 [예제 7-6] 상속 관계를 갖는 클래스들 class Account { … } 클래스 변수에는 서브클래스 객체도 대입 가능합니다. 상속 상속 class CheckingAccount extends Account { … } class CreditLineAccount extends Account { … } 상속 class CheckingTrafficCardAccount extends CheckingAccount { … }

01. 레퍼런스 타입 레퍼런스 타입 변수의 타입과 객체의 타입 [예제 7-7] 구현/상속 관계를 갖는 인터페이스와 클래스들 interface Colorable { … } 인터페이스 변수에는 그 인터페이스를 직접/간접 구현하는 클래스의 객체를 대입할 수 있습니다. 구현 상속 class PlainText implements Colorable { … } interface Changeable extends Colorable { … } 상속 구현 class CompoundText extends PlainText { … } class Circle implements Changeable { … }

01. 레퍼런스 타입 레퍼런스 타입 변수에 의해 제한되는 객체의 사용 방법 [예제 7-8] Accont 클래스와 CheckingAccount 클래스 은행 계좌 클래스 class Account { String accountNo; String ownerName; int balance; Account(String accountNo, String ownerName, int balance) { this.accountNo = accountNo; this.ownerName = ownerName; this.balance = balance; } void deposit(int amount) { balance += amount; int withdraw(int amount) throws Exception { if (balance < amount) throw new Exception("잔액이 부족합니다."); balance -= amount; return amount; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 직불 계좌 클래스 class CheckingAccount extends Account { String cardNo; CheckingAccount(String accountNo, String ownerName, int balance, String cardNo) { super(accountNo, ownerName, balance); this.cardNo = cardNo; } int pay(String cardNo, int amount) throws Exception { if (!cardNo.equals(this.cardNo) || (balance < amount)) throw new Exception("지불이 불가능합니다."); return withdraw(amount); 상속 1 2 3 4 5 6 7 8 9 10 11 12

레퍼런스 타입 01. 레퍼런스 타입 변수에 의해 제한되는 객체의 사용 방법 • 다른 타입의 객체를 가리키는 클래스 변수

01. 레퍼런스 타입 레퍼런스 타입 변수에 의해 제한되는 객체의 사용 방법 [예제 7-9] 변수 타입에 속하지 않는 필드와 메소드를 사용하는 잘못된 프로그램 1 2 3 4 5 6 7 8 9 10 11 12 13 class RefTypeExample6 { public static void main(String args[]) { Account obj = new CheckingAccount("111-22-33333333", "홍길동", 10, "4444-5555-6666-7777"); try { int amount = obj.pay("4444-5555-6666-7777", 47000); System.out.println("인출액: " + amount); System.out.println("카드번호: " + obj.cardNo); } catch (Exception e) { System.out.println(e.getMessage()); Account 클래스에 없는 메소드와 필드를 사용하는 잘못된 명령문

01. 레퍼런스 타입 레퍼런스 타입 변수에 의해 제한되는 객체의 사용 방법 [예제 7-10] 슈퍼클래스 변수 값을 서브클래스 변수에 대입하는 잘못된 프로그램 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class RefTypeExample7 { public static void main(String args[]) { Account obj1 = new CheckingAccount("111-22-33333333", "홍길동", 100000, "5555-6666-7777-8888"); CheckingAccount obj2 = obj1; // 잘못된 대입문 try { int amount = obj2.pay("5555-6666-7777-8888", 47000); System.out.println("인출액: " + amount); System.out.println("카드번호: " + obj2.cardNo); } catch (Exception e) { System.out.println(e.getMessage());

01. 레퍼런스 타입 레퍼런스 타입 서브타입 • 서브타입(subtype)이란? • 클래스와 인터페이스의 서브타입 어떤 타입의 객체가 사용되어야 할 위치에 다른 타입의 객체를 대신 끼워넣을 수 있으면 후자를 전자의 서브타입이라고 함 • 클래스와 인터페이스의 서브타입

01. 레퍼런스 타입 레퍼런스 타입 서브타입과 대입 연산 • 서브타입은 대입 연산의 성립 여부 결정의 기준이 됨 이 연산이 성립하기 위해서는 다음 둘 중 한 조건이 만족해야 함 obj1의 타입 = obj2의 타입 obj1의 타입 = obj2의 서브타입 하지만 때로는 이 중 한 조건이 만족하더라도 캐스트 연산이 필요

01. 레퍼런스 타입 레퍼런스 타입 캐스트 연산자 • 레퍼런스 타입에 캐스트 연산자를 사용하는 방법 * 문법적으로는 프리미티브 타입의 캐스트 연산과 동일

레퍼런스 타입 01. 레퍼런스 타입 캐스트 연산자 [예제 7-11] 슈퍼클래스 변수 값을 캐스트해서 서브클래스 변수에 대입하는 프로그램 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class RefTypeExample8 { public static void main(String args[]) { Account obj1 = new CheckingAccount("111-22-33333333", "홍길동", 100000, "5555-6666-7777-8888"); CheckingAccount obj2 = (CheckingAccount) obj1; try { int amount = obj2.pay("5555-6666-7777-8888", 47000); System.out.println("인출액: " + amount); System.out.println("카드번호: " + obj2.cardNo); } catch (Exception e) { System.out.println(e.getMessage());

캐스트 연산자를 레퍼런스 타입에 대해 사용하면 01. 레퍼런스 타입 캐스트 연산자 • 프리미티브 타입과 레퍼런스 타입의 캐스트 연산 차이 (short) (CheckingAccount) CheckingAccount 타입 변수에 대입할 수 있는 객체임을 보증함 캐스트 연산자를 프리미티브 타입에 대해 사용하면 데이터 타입이 바뀝니다. 캐스트 연산자를 레퍼런스 타입에 대해 사용하면 객체의 타입을 보증하는 역할만 합니다.

01. 레퍼런스 타입 레퍼런스 타입 캐스트 연산자 [예제 7-12] 객체를 그와 맞지 않는 타입으로 캐스트하는 잘못된 예 1 3 4 5 6 7 8 9 10 11 12 13 14 class RefTypeExample9 { public static void main(String args[]) { Account obj1 = new Account("111-22-33333333", "홍길동", 100000); CheckingAccount obj2 = (CheckingAccount) obj1; try { int amount = obj2.pay("5555-6666-7777-8888", 47000); System.out.println("인출액: " + amount); System.out.println("카드번호: " + obj2.cardNo); } catch (Exception e) { System.out.println(e.getMessage()); 잘못된 캐스트 연산

01. 레퍼런스 타입 레퍼런스 타입 instanceof 연산자

01. 레퍼런스 타입 레퍼런스 타입 instanceof 연산자 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class RefTypeExample10 { public static void main(String args[]) { Account obj = new Account("111-22-33333333", "홍길동", 100000); if (obj instanceof CheckingAccount) pay((CheckingAccount) obj); else System.out.println("캐스트할 수 없는 타입입니다."); } static void pay(CheckingAccount obj) { try { int amount = obj.pay("5555-6666-7777-8888", 47000); System.out.println("인출액: " + amount); System.out.println("카드번호: " + obj.cardNo); catch (Exception e) { System.out.println(e.getMessage()); obj를 CheckingAccount로 캐스트할 수 있을 때만 pay 메소드 호출

02. 열거 타입 레퍼런스 타입 열거 타입의 필요성 • 한정된 수의 값을 표현하기 위해 필요 [예1] 월, 화, 수, 목, 금, 토, 일 [예2] 봄, 여름 가을, 겨울 • 자바에서 열거 타입이 있기 전에는; 코드화된 정수나 문자를 이용하여 해당 값을 표현했음

02. 열거 타입 레퍼런스 타입 열거 타입의 필요성 [예제 7-14] 사계절을 표현하는 코드 값을 상수로 선언해서 사용하는 예 의류 정보 클래스 class ClothingInfo { String code; String name; String material; int season; static final int SPRING = 1; static final int SUMMER = 2; static final int FALL = 3; static final int WINTER = 4; ClothingInfo(String code, String name, String material, int season) { this.code = code; this.name = name; this.material = material; this.season = season; } 사계절을 표현하는 상수 필드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 의류 정보 클래스를 사용하는 프로그램 class OldExample { public static void main(String args[]) { ClothingInfo obj = new ClothingInfo("32919", "반팔 티셔츠", "면100%", ClothingInfo.SUMMER); System.out.println("상품코드: " + obj.code); System.out.println("상품명: " + obj.name); System.out.println("소재: " + obj.material); System.out.println("계절구분: " + obj.season); } ClothingInfo 클래스에 선언된 상수 필드를 사용 1 2 3 4 5 6 7 8 9

레퍼런스 타입 02. 열거 타입 열거 타입의 선언과 이용 • 열거 타입의 정의 열거 타입에 속하는 값들을 파악하여 정의

02. 열거 타입 레퍼런스 타입 열거 타입의 선언과 이용 • 열거 타입의 선언 제일 먼저 해야할 일은 열거 타입 이름과 열거 값 이름 정하기

레퍼런스 타입 02. 열거 타입 열거 타입의 선언과 이용 • 열거 타입의 선언

레퍼런스 타입 02. 열거 타입 열거 타입의 선언과 이용 • 열거 타입의 변수 선언

02. 열거 타입 레퍼런스 타입 열거 타입의 선언과 이용 • 열거 타입의 변수의 사용 * 열거 타입 변수에는 그 열거 타입에 속하는 열거 값(열거 상수)만 대입가능

02. 열거 타입 레퍼런스 타입 열거 타입의 선언과 이용 [예제 7-15] 사계절을 열거 타입으로 선언해서 사용하는 예 사계절 열거 타입 enum Season { SPRING, SUMMER, FALL, WINTER } 1 2 3 의류 정보 클래스 class ClothingInfo { String code; String name; String material; Season season; ClothingInfo(String code, String name, String material, Season season) { this.code = code; this.name = name; this.material = material; this.season = season; } 열거 타입의 필드 1 2 3 4 5 6 7 8 9 10 11 12 열거 타입의 파라미터 변수 의류 정보 클래스를 사용하는 프로그램 class NewExample { public static void main(String args[]) { ClothingInfo obj = new ClothingInfo("32919", "반팔 티셔츠", "면100%", Season.SUMMER); System.out.println("상품코드: " + obj.code); System.out.println("상품명: " + obj.name); System.out.println("소재: " + obj.material); System.out.println("계절구분: " + obj.season); } 열거 상수 1 2 3 4 5 6 7 8 9

02. 열거 타입 레퍼런스 타입 클래스에 종속된 열거 타입 • 클래스/인터페이스 안에 선언된 열거 타입은 그 클래스/인터페이스에 종속됨 • 클래스/인터페이스에 종속된 열거 타입의 사용 방법

02. 열거 타입 레퍼런스 타입 클래스에 종속된 열거 타입 [예제 7-16] 사계절 열거 타입을 클래스 안에 선언해서 사용하는 예 의류 정보 클래스 class ClothingInfo { enum Season { SPRING, SUMMER, FALL, WINTER } String code; String name; String material; Season season; ClothingInfo(String code, String name, String material, Season season) { this.code = code; this.name = name; this.material = material; this.season = season; 사계절 열거 타입 열거 타입 필드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 열거 타입 파라미터 변수 의류 정보 클래스를 사용하는 프로그램 class NewExample2 { public static void main(String args[]) { ClothingInfo obj = new ClothingInfo("32919", "반팔 티셔츠", "면100%", ClothingInfo.Season.SUMMER); System.out.println("상품코드: " + obj.code); System.out.println("상품명: " + obj.name); System.out.println("소재: " + obj.material); System.out.println("계절구분: " + obj.season); } 1 2 3 4 5 6 7 8 9 열거 상수

02. 열거 타입 레퍼런스 타입 values 메소드와 valueOf 메소드 • 열거 타입은 컴파일하고 나면 내부적으로 클래스가 됨 -> 그 클래스에는 values와 valueOf라는 정적 메소드가 자동으로 추가됨 • values 메소드 : 모든 열거 상수를 리턴하는 메소드 • valueOf 메소드 : 주어진 문자열에 해당하는 열거 상수를 리턴하는 메소드

02. 열거 타입 레퍼런스 타입 values 메소드와 valueOf 메소드 [예제 7-17] 요일을 표현하는 열거 타입 1 2 3 enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

02. 열거 타입 레퍼런스 타입 values 메소드와 valueOf 메소드 1 2 3 4 5 6 7 class EnumExample1 { public static void main(String args[]) { Day days[] = Day.values(); for (Day day : days) System.out.println(day); }

02. 열거 타입 레퍼런스 타입 values 메소드와 valueOf 메소드 1 2 3 4 5 6 7 8 9 10 11 class EnumExample2 { public static void main(String args[]) { printDay("MONDAY"); printDay("WEDNESDAY"); printDay("FRIDAY"); } static void printDay(String name) { Day day = Day.valueOf(name); System.out.println(day);

02. 열거 타입 레퍼런스 타입 열거 상수를 다른 값과 연관짓기 • 다음의 열거 상수들을 “봄”, “여름”, “가을”, “겨울”이라는 이름과 연관시킬 수 있음

레퍼런스 타입 02. 열거 타입 열거 상수를 다른 값과 연관짓기 • 1단계 : 각각의 열거 상수 뒤에 연관 값을 기술

레퍼런스 타입 02. 열거 타입 열거 상수를 다른 값과 연관짓기 • 2단계 : 연관 값을 저장할 필드 선언

레퍼런스 타입 02. 열거 타입 열거 상수를 다른 값과 연관짓기 • 3단계 : 생성자의 선언

레퍼런스 타입 02. 열거 타입 열거 상수를 다른 값과 연관짓기 • 4단계 : 메소드의 선언

02. 열거 타입 레퍼런스 타입 열거 상수를 다른 값과 연관짓기 [예제 7-20] 열거 상수에 연관된 값을 이용하는 프로그램 요일 열거 타입 enum Season { SPRING("봄"), SUMMER("여름"), FALL("가을"), WINTER("겨울") ; final private String name; Season(String name) { this.name = name; } String value() { return name; 1 2 3 4 5 6 7 8 9 10 요일 열거 타입을 사용하는 프로그램 class EnumExample3 { public static void main(String args[]) { printSeason(Season.SPRING); printSeason(Season.SUMMER); printSeason(Season.FALL); printSeason(Season.WINTER); } static void printSeason(Season season) { System.out.println(season.value()); 1 2 3 4 5 6 7 8 9 10 11 메소드 호출