강원대학교 자바프로그래밍 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장. 클래스와 객체의 사용 ①.
5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
7장 배열 ②.
윤 홍 란 제3장 클래스와 객체의 사용-1 윤 홍 란
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
Power Java 제4장 자바 프로그래밍 기초.
7장 배열 ②.
Power Java 제15장 예외 처리 (Exception Handling).
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 6. 형변환.
명품 Java Programming.
윤 홍 란 4 장 클래스 작성 윤 홍 란
레퍼런스 타입에 대하여 열거 타입의 선언과 이용
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
5장 조건과 반복 ①.
자바 5.0 프로그래밍.
인터페이스(Interfaces) 강원대학교.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
3장 자바의 기본문법(2).
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
제 4주 – 클래스 설계 제 4주 목표 클래스를 구현하는 법을 배운다. 변수 선언 메소드 구현 구성자 객체지향프로그래밍
제 6주 인터페이스 (Interfaces) 제 6주 목표 인터페이스 개념 이해 다형성 개념 이해 자바프로그래밍 강원대학교.
6장 객체-지향 설계 ①.
자바 5.0 프로그래밍.
C#.
[INA470] Java Programming Youn-Hee Han
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
5장 조건과 반복 ②.
인터넷응용프로그래밍 JavaScript(Intro).
6장 객체-지향 설계 ①.
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.
Fucntion 요약.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
함수, 모듈.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
7 생성자 함수.
6 객체.
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 BankAccount { 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; } private 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 클래스 멤버 : 메소드와 필드 (, inner classes and interfaces)

인스턴스 필드와 클래스 필드 인스턴스 필드 : 인스턴스마다 존재하는 필드 클래스 필드 : 클래스 공통으로 하나만 존재하는 필드 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; public BankAccount(double initialBalance){ balance = initialBalance; // increment number of Accounts and assign account number accountNumber = ++numberOfAccounts; } public int getAccountNumber() { return accountNumber; } BankAccount numberOfAccounts: 0 자바프로그래밍 12

강원대학교 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 자바프로그래밍 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 b2 = new BankAccount(200.0); BankAccount numberOfAccounts: 2 balance: accountNumber: 1 b1 balance: accountNumber: 2 b2 자바프로그래밍 14

클래스 필드에 접근하는 법 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); 강원대학교자바프로그래밍 15

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

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

강원대학교 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 자바프로그래밍 18

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

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()); } 강원대학교자바프로그래밍 20

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));// error! } Cannot make a static reference to the non-static method add(int, int) from the type Adder 강원대학교자바프로그래밍 21

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));// OK! } 강원대학교자바프로그래밍 22

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));// OK! } 강원대학교자바프로그래밍 23

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)); // OK! // 같은 클래스 내 } 강원대학교자바프로그래밍 24

강원대학교 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 클래스 밖에서 사용 자바프로그래밍 25

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

강원대학교 클래스 멤버에의 접근성 외부로 노출시켜야 할 멤버는 public 내부 기능을 위한 멤버는 private 자바프로그래밍 27

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

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

강원대학교 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: 컴파일 에러 ! 자바프로그래밍 30

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

강원대학교 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; } 자바프로그래밍 32

객체지향프로그래밍강원대학교 Scope of Class Members Private 멤버는 class scope 를 갖는다. – 클래스 내의 어떤 메소드에서건 클래스 멤버를 사용할 수 있다. 클래스 밖에서 public member 를 사용하려면 어 떤 멤버를 사용할 것인지 명확히 지정해야 한다. Math.sqrt() // static member 의 경우 harrysChecking.getBalance() // instance member 의 경우 33

객체지향프로그래밍강원대학교 Scope of Class Members 메소드 내에서 필드 혹은 메소드 이름만 적어주면 this 를 붙여 준 것과 같다. 즉 현재 메소드를 실행 하고 있는 객체에게 메소드를 호출한 셈이다. public class BankAccount { public void transfer(double amount, BankAccount other) { withdraw(amount); // i.e., this.withdraw(amount); other.deposit(amount); }... } 34

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

강원대학교 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” 자바프로그래밍 36

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

강원대학교 객체를 출력하면 객체에 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] 자바프로그래밍 38

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

강원대학교 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); 자바프로그래밍 40

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

강원대학교 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(); 자바프로그래밍 42

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

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

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

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

강원대학교 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 문장 형식 자바프로그래밍 47

강원대학교 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); 자바프로그래밍 48

강원대학교 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: 자바프로그래밍 49

강원대학교 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: } 자바프로그래밍 50

강원대학교 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: } 자바프로그래밍 51

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

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

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

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

객체지향프로그래밍강원대학교 Package Names and Locating Classes Use packages to avoid name clashes 패키지 이름은 혼동되지 않도록 정해야 한다. 권고 : 도메인 네임을 역순으로 사용 edu.sjsu.cs.walters: for Walters' classes java.util.Timer vs. javax.swing.Timer 56

객체지향프로그래밍강원대학교 Base Directories and Subdirectories for Packages com.horstmann.bigjava.Nemeric 57

객체지향프로그래밍강원대학교 Package Names and Locating Classes 소스 파일의 path name 은 package name 에 대응되도록 해 주어야 한 다. 기준 위치 (base directory) 는 classpath 환경변수에 지정해 준다. 기준위치에서 컴파일, 실행 등 작업을 할 때에는 classpath 를 설정해 주지 않아도 된다. com/horstmann/bigjava/Financial.java export CLASSPATH=/home/walters:. set CLASSPATH=c:\home\walters;. com.horstmann.bigjava.Nemeric 58

객체지향프로그래밍강원대학교 패키지를 사용한 프로그래밍 패키지명 결정 kr.ac.kangwon.ckjeong.homework1 기본 디렉토리 ( 기준 위치 ) 설정 mkdir c:\oop 기본 디렉토리 안에 패키지명과 일치하는 서브디렉토리를 만듦 cd c:\oop mkdir kr mkdir kr\ac mkdir kr\ac\kangwon mkdir kr\ac\kangwon\ckjeong mkdir kr\ac\kangwon\ckjeong\homework1 59

객체지향프로그래밍강원대학교 패키지를 사용한 프로그래밍 소스 파일을 맨 아래 디렉토리에 작성 c:\oop\kr\ac\kangwon\ckjeong\homework1\Test.java 소스 파일에 package 문장 삽입 package kr.ac.kangwon.ckjeong.homework1 기본 디렉토리에서 소스 파일 컴파일 cd c:\oop javac kr\ac\kangwon\ckjeong\homework1\Test.java 기본 디렉토리에서 프로그램 실행 java kr.ac.kangwon.ckjeong.homework1.Test 파일 이름 클래스 이름 60