강원대학교 자바프로그래밍 제 4 주 클래스 설계 2 자바프로그래밍 1. 객체 자신에게 메소드 호출하기 vs 다른 객체에게 메소드 호출하기 강원대학교자바프로그래밍 2.

Slides:



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

5 장 조건과 반복 ②. Contents Counting and Looping [while 문 사용 ] Powers of 2 [while 문 사용 ] More Guessing [do 문 사용 ] Election Day [do 문 사용 ] Finding Maximum &
강원대학교 자바프로그래밍 4. 클래스 설계 2 자바프로그래밍 1. 객체 자신에게 메소드 호출하기 vs 다른 객체에게 메소드 호출하기 강원대학교자바프로그래밍 2.
강원대학교 3 클래스 구현 1. 강원대학교 클래스 구현 순서 1. 클래스의 공개 인터페이스 설계 2. 메소드 선언 ( 메소드 사용 사례를 적어 봄 ) 3. 구성자 선언 4. 주석 기입 및 API 문서 제작 5. 필드 선언 6. 메소드 구현 7. 테스트 2.
3 클래스 구현 자바프로그래밍 강원대학교.
어서와 Java는 처음이지! 제3장선택과 반복.
프로그래밍 개론 Ⅰ 제 3장. 클래스와 객체의 사용 ①.
제 7주 2015년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
7장 배열 ②.
클래스 구성 요소 1개의 클래스는 최대 8개의 구성 요소를 가질 수 있다
6장 객체-지향 설계 ①.
윤 홍 란 제3장 클래스와 객체의 사용-1 윤 홍 란
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
3. 자바에서 지원하는 패키지 자바에서 기본적으로 제공하는 패키지.
Power Java 제4장 자바 프로그래밍 기초.
Lesson 3. 입출력과 제어문.
7장 배열 ②.
Power Java 제10장 배열.
Power Java 제15장 예외 처리 (Exception Handling).
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 6. 형변환.
명품 Java Programming.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
윤 홍 란 4 장 클래스 작성 윤 홍 란
레퍼런스 타입에 대하여 열거 타입의 선언과 이용
5장 조건과 반복 ①.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
자바 5.0 프로그래밍.
인터페이스(Interfaces) 강원대학교.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
3장 자바의 기본문법(2).
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
제 4주 – 클래스 설계 제 4주 목표 클래스를 구현하는 법을 배운다. 변수 선언 메소드 구현 구성자 객체지향프로그래밍
제 6주 인터페이스 (Interfaces) 제 6주 목표 인터페이스 개념 이해 다형성 개념 이해 자바프로그래밍 강원대학교.
6장 객체-지향 설계 ①.
자바 5.0 프로그래밍.
C#.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
5장 조건과 반복 ②.
제2장 데이터 및 수식.
인터넷응용프로그래밍 JavaScript(Intro).
6장 객체-지향 설계 ①.
Lesson 4. 수식과 연산자.
Chapter 11 객체지향 프로그래밍의 기초 01 클래스 02 생성자 03 인스턴스 변수와 클래스 변수 예제 모음 요약
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터공학실습(I) 3주 인공지능연구실.
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Power Java 제11장 상속.
5장 조건과 반복 ①.
JA A V W. 06.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
함수, 모듈.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
7 생성자 함수.
3장 자바의 기본문법(2).
Presentation transcript:

강원대학교 자바프로그래밍 제 4 주 클래스 설계 2 자바프로그래밍 1

객체 자신에게 메소드 호출하기 vs 다른 객체에게 메소드 호출하기 강원대학교자바프로그래밍 2

강원대학교 public class BankAccount { public BankAccount() public BankAccount(double initialBalance) public void deposit(double amount) public void withdraw(double amount) public void transfer(double amount, BankAccount other) public double getBalance() private double balance; } BankAccount kims, moms; kims = new BankAccount(); moms = new BankAccount(1000.0); moms.deposit(2000.0); moms.transfer(500.0, kims); System.out.println(moms.getBalance()); System.out.println(kims.getBalance()); momskims 자바프로그래밍 3

강원대학교 public class BankAccount { public void deposit(double amount) { double newBalance = balance + amount; balance = newBalance; } private double balance; } BankAccount kims, moms; kims = new BankAccount(); moms = new BankAccount(1000.0); moms.deposit(2000.0); moms.transfer(500.0, kims); System.out.println(moms.getBalance()); System.out.println(kims.getBalance()); momskims 자바프로그래밍 4

강원대학교 public class BankAccount { public void deposit(double amount) { double newBalance = balance + amount; balance = newBalance; } public void withdraw(double amount){...} public void transfer(double amount, BankAccount other) { withdraw(amount); other.deposit(amount); } private double balance; } BankAccount kims, moms; kims = new BankAccount(); moms = new BankAccount(1000.0); moms.deposit(2000.0); moms.transfer(500.0, kims); System.out.println(moms.getBalance()); System.out.println(kims.getBalance()); momskims 자바프로그래밍 5

강원대학교 public class BankAccount { public void deposit(double amount) { double newBalance = balance + amount; balance = newBalance; } public void transfer(double amount, BankAccount other) { this.withdraw(amount) other.deposit(amount); } private double balance; } BankAccount kims, moms; kims = new BankAccount(); moms = new BankAccount(1000.0); moms.deposit(2000.0); moms.transfer(500.0, kims); System.out.println(moms.getBalance()); System.out.println(kims.getBalance()); momskims 자바프로그래밍 6

강원대학교 class Account { private double balance = 0.0; final double BONUS_RATE = 0.01; public void deposit(double amount) { balance = amount + calculateBonus(amount); // 혹은 balance = amount + this.calculateBonus(amount); } public double getBalance() { return balance; } double calculateBonus(double amount){ return amount*BONUS_RATE; } 자바프로그래밍 7

구성자에서 구성자 호출하기 강원대학교자바프로그래밍 8

강원대학교 public BankAccount() { balance = 0; } public BankAccount(double initialBalance) { balance = initialBalance; } public BankAccount() { this(0); } public BankAccount(double initialBalance) { balance = initialBalance; } 자바프로그래밍 9

인스턴스 멤버와 클래스 멤버 강원대학교자바프로그래밍 10

인스턴스 변수와 클래스 변수 인스턴스 변수 : 인스턴스마다 존재하는 변수 클래스 변수 : 클래스 공통으로 하나만 존재하는 변수 public class BankAccount{ private double balance; private int accountNumber; private static int numberOfAccounts = 0; } 강원대학교자바프로그래밍 11

인스턴스 변수와 클래스 변수 인스턴스 변수 : 인스턴스마다 존재하는 변수 클래스 변수 : 클래스 공통으로 하나만 존재하는 변수 public class BankAccount{ private double balance; private int accountNumber; private static int numberOfAccounts = 0; } 강원대학교자바프로그래밍 12

강원대학교 public class BankAccount{ private double balance; private int accountNumber; private static int numberOfAccounts = 0; public BankAccount(double initialBalance){ balance = initialBalance; // increment number of Accounts and assign account number accountNumber = ++numberOfAccounts; } public int getAccountNumber() { return accountNumber; } BankAccount numberOfAccounts: 0 자바프로그래밍 13

강원대학교 public class BankAccount { private double balance; private int accountNumber; private static int numberOfAccounts = 0; public BankAccount(double initialBalance){ balance = initialBalance; accountNumber = ++numberOfAccounts; } BankAccount b1 = new BankAccount(100.0); BankAccount numberOfAccounts: 1 balance: accountNumber: 1 b1 자바프로그래밍 14

강원대학교 public class BankAccount { private double balance; private int accountNumber; private static int numberOfAccounts = 0; public BankAccount(double initialBalance){ balance = initialBalance; accountNumber = ++numberOfAccounts; } BankAccount b1 = new BankAccount(100.0); BankAccount b2 = new BankAccount(200.0); BankAccount numberOfAccounts: 0 balance: accountNumber: 1 b1 balance: accountNumber: 2 b2 자바프로그래밍 15

클래스 변수에 접근하는 법 public class BankAccount{ double balance; int accountNumber; static int numberOfAccounts = 0; } BankAccount b1 = new BankAccount(100.0); // 인스턴스변수에는 레퍼런스를 통해 접근 System.out.println(b1.balance); // 클래스변수에는 클래스이름을 통해 접근 System.out.println(BankAccount.numberOfAccounts); 강원대학교자바프로그래밍 16

강원대학교 클래스 메소드 static 키워드가 메소드 앞에 붙으면 그 메소드는 개별 객체에 작용하 지 않는다는 의미 Static 메소드는 아래와 같은 형식으로 호출 ClassName. methodName(parameters) Math 클래스 메소드들은 대부분 static 메소드 자바프로그래밍 17

강원대학교 The Math class (-b + Math.sqrt(b*b - 4*a*c)) / (2*a) 자바프로그래밍 18

강원대학교 Mathematical Methods in Java Math.sqrt(x) square root Math.pow(x, y) power x y Math.exp(x) exex Math.log(x) natural log Math.sin(x), Math.cos(x), Math.tan(x) sine, cosine, tangent (x in radian) Math.round(x) closest integer to x Math.min(x, y), Math.max(x, y) minimum, maximum 자바프로그래밍 19

맥락에 맞게 사용해야 함 인스턴스 메소드에서 인스턴스 변수와 인스턴스 메소드에 직접 접근 가능 인스턴스 메소드에서 클래스 변수와 클래스 메소 드에 직접 접근 가능 클래스 메소드에서 클래스 변수와 클래스 메소드 에 직접 접근 가능 클래스 메소드에서 인스턴스 변수와 인스턴스 메 소드에 직접 접근 불가능 강원대학교자바프로그래밍 20

public class BankAccount { private double balance; private int accountNumber; private static int numberOfAccounts = 0; public BankAccount(double initialBalance) { balance = initialBalance; accountNumber = ++numberOfAccounts; } public void deposit(double amount) {balance = amount + amount;} public void withdraw(double amount) { balance = balance – amount;} public static int getNumberOfAccounts() {return numberOfAccounts;} public static void main(String[] args) { BankAccount account = new BankAccount(100.0); account.deposit(100.0); withdraw(100.0);  System.out.println(BankAccount.getNumberOfAccounts()); } 강원대학교자바프로그래밍 21

public class Adder { public int add(int a, int b) { return a + b; } public static void main(String[] args) { System.out.println(add(1, 2)); } Cannot make a static reference to the non-static method add(int, int) from the type Adder 강원대학교자바프로그래밍 22

public class Adder { public int add(int a, int b) { return a + b; } public static void main(String[] args) { Adder adder = new Adder(); System.out.println(adder.add(1, 2)); } 강원대학교자바프로그래밍 23

public class Adder { public static int add(int a, int b) { return a + b; } public static void main(String[] args) { System.out.println(Adder.add(1, 2)); } 강원대학교자바프로그래밍 24

public class Adder { public static int add(int a, int b) { return a + b; } public static void main(String[] args) { System.out.println(add(1, 2)); // 같은 클래스 내 } 강원대학교자바프로그래밍 25

강원대학교 Constants( 상수 ): static final static final constant 는 다른 클래스에 의해 주로 사 용됨 static final constant 는 아래와 같은 방법으로 사용 public class Math {... public static final double E = ; public static final double PI = ; } double circumference = Math.PI * diameter; // Math 클래스 밖에서 사용 자바프로그래밍 26

접근성 private – 같은 클래서 내에서만 접근 가능 (package) – 같은 패키지 내에서만 접근 가능 protected – 같은 패키지, 혹은 서브클래스에서 접 근 가능 public – 누구나 접근 가능 강원대학교자바프로그래밍 27

강원대학교 클래스 멤버에의 접근성 외부로 노출시켜야 할 멤버는 public 내부 기능을 위한 멤버는 private 멤버 : 메소드와 필드 (, inner classes and interfaces) 자바프로그래밍 28

강원대학교 Fields 에의 접근성 필드 변수에의 접근성 (accessibility) public int i;// 누구나 i 에 접근할 수 있음 int i;// 같은 패키지 안에서 접근할 수 있음 private int i; // 같은 클래스 안에서만 접근할 수 있음 일반적으로 클래스 외부에서 클래스 내의 변수에 접근하는 것은 정보 은닉 원칙에 어긋나므로 이를 허용하지 않도록 private 로 선언  필드 변수는 통상 private 로 선언 ! 자바프로그래밍 29

강원대학교 Fields public 클래스 필드에 직접 접근하려면 아래와 같이 할 수 있음 Student s = new Student(); System.out.println(s.name); s.name = “ 배철수 ”; 이런 방법은 권장하지 않음 필드 변수는 private 로 선언하고 필드 변수는 그 객체가 지원하는 메소드를 통해서 변경하는 것이 좋음 class Studnent { public String name = “ 철수 ”; // 필드 } 자바프로그래밍 30

강원대학교 private instance field private instance field 에는 해당 클래스 내에서만 접근 가능하다. public class BankAccount { private double balance; public void deposit(double amount) { double newBalance = balance + amount; balance = newBalance; } } BankAccount maryAccount = new BankAccount(5000); maryAccount.balance = maryAccount.balance ; Tester: 컴파일 에러 ! 자바프로그래밍 31

강원대학교 메소드에의 접근성 외부로 노출시켜야 할 메소드는 public 내부 기능을 위한 메소드는 private 자바프로그래밍 32

강원대학교 class Account { private double balance = 0.0; final double BONUS_RATE = 0.01; public void deposit(double amount) { balance = amount + calculateBonus(amount); } public double getBalance() { return balance; } // Account 내부에서만 사용되는 메소드 private double calculateBonus(double amount){ return amount*BONUS_RATE; } 자바프로그래밍 33

기타 강원대학교자바프로그래밍 34

강원대학교 String Concatenation ( 문자열 연결 ) Use the + operator: 문자열을 다른 값과 + 연산자로 연결하면 다른 값 은 자동으로 문자열로 변환됨 String name = "Dave"; String message = "Hello, " + name; // message is "Hello, Dave" String a = "Agent"; int n = 7; String bond = a + n; // bond is “Agent7” 자바프로그래밍 35

강원대학교 Concatenation in Print Statements 아래 두 프로그램은 동일 결과 System.out.print("The total is "); System.out.println(total); System.out.println("The total is " + total); 자바프로그래밍 36

강원대학교 객체를 출력하면 객체에 toString() 메소드가 호출되고 그 반환값이 출력됨 객체를 문자열과 + 연산자로 연결하면 객체에 toString() 메소드가 호출되고 그 반환값이 문자열 과 연결됨 Rectangle r = new Rectangle(); System.out.println(r); // java.awt.Rectangle[x=0,y=0,width=0,height=0] Rectangle r = new Rectangle(); String s = r + ""; System.out.println(s); // java.awt.Rectangle[x=0,y=0,width=0,height=0] 자바프로그래밍 37

강원대학교 Strings and Numbers Number (integer 의 경우 ) 12 = C ( ) 1024 = ( ) = ( ) String "12" = "1024" = " " = 자바프로그래밍 38

강원대학교 Converting between Strings and Numbers Convert to number: Convert to string: String str = “35”; String xstr = “12.3”; int n = Integer.parseInt(str); double x = Double.parseDouble(xstr); int n = 10; String str = "" + n; str = Integer.toString(n); 자바프로그래밍 39

강원대학교 Substrings String 클래스의 메소드 String greeting = "Hello, World!"; String sub = greeting.substring(0, 5); // sub is "Hello" inclusive exclusive 자바프로그래밍 40

강원대학교 Reading Input – Scanner 클래스 Scanner 인스턴스를 만들고 이 객체에 적절한 입력 메소드 호출 – next reads a word (until any white space) – nextLine reads a line (until user hits Enter) Scanner in = new Scanner(System.in); System.out.print("Enter quantity: "); int quantity = in.next(); 자바프로그래밍 41

강원대학교 객체를 생성하기 위해서는 키워드 new 생성자를 사용 Rectangle r = new Rectangle(1, 1, 2, 3); 그러나 String 객체만은 예외적으로 String s = " 스트링 “ 과 같이 간편하게 생성하는 것도 가능 특수문자 new line – "\n" 탭 – "\t" 따옴표 – "\"" 자바프로그래밍 42

강원대학교 Scanner scanner = new Scanner(System.in); String id = scanner.next(); if (id.matches("[12]"))... 정규식 (regular expression) [a-z] 입력 값을 검사하는 법 자바프로그래밍 43

강원대학교 Color c = panel.getBackground(); if(c.equals(Color.black))... if(panel.getBackground().equals(Color.black))... 이렇게 써도 된다. 자바프로그래밍 44

강원대학교 경과 시간 측정하는 법 long start = System.currentTimeMillis();.... long duration = (System.currentTimeMillis()-start)/1000; 자바프로그래밍 45

강원대학교 switch (expr) {// expr 는 정수나 char 등의 타입 ! case c1: statements // do these if expr == c1 break; case c2: statements // do these if expr == c2 break; case c2: case c3: case c4: // Cases can simply fall thru. statements // do these if expr == any of c's break;... default: statements // do these if expr != any above } switch 문장 형식 자바프로그래밍 46

강원대학교 Random Numbers and Simulations Random number generator 주사위 (random number between 1 and 6) Random generator = new Random(); int n = generator.nextInt(a); // 0 <= n < a double x = generator.nextDouble(); // 0 <= x < 1 int d = 1 + generator.nextInt(6); 자바프로그래밍 47

강원대학교 File Die.java 01: import java.util.Random; 02: 03: /** 04: This class models a die that, when cast, lands on a 05: random face. 06: */ 07: public class Die 08: { 09: /** 10: Constructs a die with a given number of sides. s the number of sides, e.g. 6 for a normal die 12: */ 13: public Die(int s) 14: { 15: sides = s; 16: generator = new Random(); 17: } 18: 자바프로그래밍 48

강원대학교 File Die.java 19: /** 20: Simulates a throw of the die the face of the die 22: */ 23: public int cast() 24: { 25: return 1 + generator.nextInt(sides); 26: } 27: 28: private Random generator; 29: private int sides; 30: } 자바프로그래밍 49

강원대학교 File DieTester.java 01: /** 02: This program simulates casting a die ten times. 03: */ 04: public class DieTester 05: { 06: public static void main(String[] args) 07: { 08: Die d = new Die(6); 09: final int TRIES = 10; 10: for (int i = 0; i < TRIES; i++) 11: { 12: int n = d.cast(); 13: System.out.print(n + " "); 14: } 15: System.out.println(); 16: } 17: } 자바프로그래밍 50

강원대학교 Wrappers 자바프로그래밍 51

강원대학교 Wrapper 인스턴스 자바프로그래밍 52

강원대학교 자동포장기능 (Auto-boxing) 기본 데이터타입과 wrapper 클래스 간 자동 변환 Double d = new Double(29.95); // 기존 방법 Double d = 29.95; // auto-boxing double x = d.doubleValue(); // 기존 방법 double x = d; // auto-unboxing 자바프로그래밍 53

강원대학교 자동포장기능 (Auto-boxing) ① d 의 포장을 벗겨 double 타입으로 만듦 ② 1 을 더함 ③결과를 Double 타입 객체로 포장 ④레퍼런스를 e 가 포장된 Double 타입 객체를 가리키도록 함 Double d = new Double(3.1); Double e = d + 1.0; 자바프로그래밍 54