2 주 객체와 클래스에 익숙해지기
description
Transcript of 2 주 객체와 클래스에 익숙해지기
자바프로그래밍 강원대학교
2 주 객체와 클래스에 익숙해지기
제 2 주 목표• 약간 복잡한 클래스 살펴보기• 다른 사람이 작성해 놓은 클래스를 이용하는 연습• API 문서를 찾아 보고 이용하는 법을 알게 됨
1
BlueJ
• 자바 프로그램 개발 도구 (eclipse 처럼 ...)• 주로 교육용으로 사용됨• 클래스와 객체를 그림으로 표현• 대화형으로 객체를 조작할 수 있다 .
자바프로그래밍 강원대학교 2
BlueJ
• Shapes
자바프로그래밍 강원대학교 3
• 실습과제 1– TicketMachine
자바프로그래밍 강원대학교 4
BlueJ
• 실습과제 2
자바프로그래밍 강원대학교 5
자바 표준 라이브러리 클래스
자바프로그래밍 강원대학교 6
자바프로그래밍 강원대학교
라이브러리와 API Document
• API: Application Programming Interface • 라이브러리에 들어 있는 클래스이 지원하는 메소드와 메소드
사용법을 보여줌• 아래 사이트에서 온라인으로 볼 수 있으며
http://docs.oracle.com/javase/7/docs/api/
내 컴퓨터에 저장해 놓고 볼 수 도 있음
7
자바프로그래밍 강원대학교
The API Document
8
강원대학교
라이브러리에 들어 있는 클래스 이용하기
• 클래스들은 그룹으로 분류되어 있으며 이 그룹을 패키지라고 함– Rectangle 클래스는 java.awt 패키지에 들어
있음– Rectangle 클래스의 full name = ja-
va.awt.Rectangle• 클래스를 import 하면 프로그램을 작성할 때 클래스의
full name(java.awt.Rectangle) 대신 Rectan-gle 이라고만 적을 수 있음
import java.awt.Rectangle;
자바프로그래밍 9
강원대학교
java.lang 패키지
• java.lang 패키지에는 가장 기본적이며 많이 사용되는 클래스들이 들어 있음
• java.lang 패키지에 들어 있는 클래스들은 import 하지 않고도 짧은 이름을 사용할 수 있음
• String 클래스와 System 클래스는 java.lang 패키지에 들어 있음
자바프로그래밍 10
자바프로그래밍 강원대학교
Rectangle Objects 라이브러리 클래스 활용 예
class Rectangle
• 클래스는 그에 속하는 각 객체의 상태를 나타내는 데이터와 수행 가능한 메소드들을 정의한다 .
• 이 중 데이터 부분을 필드 (field) 혹은 상태변수라고 부른다 .
자바프로그래밍 강원대학교
Rectangle Objects 라이브러리 클래스 활용 예
x
y
(0, 0)
사각형의 위치(30, 20)
30
20int heightint widthint xint y height
width
(x, y)
Rectangle 의 field
구성자 (constructor)
강원대학교자바프로그래밍 13
자바프로그래밍 강원대학교
객체를 만드는 (construct) 법
1. new 는 연산자 (operator) 로서 Rectangle 클래스의 객체를 하나 구성하여 반환한다 .
2. 새로이 구성되는 Rectangle 객체는 주어진 인자에 맞춰 만들어진다 . 위치가 (5, 10) 이고 폭이 20, 높이가 30
3. 새로이 만들어진 객체는 Rectangle 타입 변수인 box 에 저장된다 .
Rectangle box = new Rectangle(5, 10, 20, 30);
14
자바프로그래밍 강원대학교
구성자 다중정의 (overloading)
위치가 (0, 0) 이고 폭이 0, 높이가 0
Rectangle box = new Rectangle();
15
위치가 (0, 0) 이고 폭이 10, 높이가 20
Rectangle box = new Rectangle(10, 20);
메소드
강원대학교자바프로그래밍 16
Mutator methods
객체의 상태 ( 필드 ) 를 변화시키는 메소드
public void insertMoney(int amount) {
balance += amount;}
자바프로그래밍 강원대학교 17
Accessor methods
객체의 상태를 변화시키지 않는 메소드
public int getPrice(){
return price;}
자바프로그래밍 강원대학교 18
자바프로그래밍 강원대학교
File MoveTester.java 01: import java.awt.Rectangle; 02: 03: public class MoveTester04: {05: public static void main(String[] args)06: {07: Rectangle box = new Rectangle(5, 10, 20, 30);08: 09: // Move the rectangle10: box.translate(15, 25);11: 12: // Print information about the moved rectangle13: System.out.println("After moving, the top-left corner is:"); 14: System.out.println(box.getX()); 15: System.out.println(box.getY()); 16: }17: }
19
자바프로그래밍 강원대학교
File MoveTester.java
07: Rectangle box = new Rectangle(5, 10, 20, 30);08: 09: // Move the rectangle10: box.translate(15, 25);11: 12: // Print information about the moved rectangle13: System.out.println("After moving, the top-left corner is:"); 14: System.out.println(box.getX()); 15: System.out.println(box.getY());
After moving, the top-left corner is:20.035.0
20
java.awt.Rectangle
• Mutator? Or Accessor? 무엇을 리턴하는가 ?– grow– union
• BlueJ
• 실습과제 3
자바프로그래밍 강원대학교 21
java.util.Random
int nextInt(int n):0 보다 크거나 같고 n 보다 작은 정수 값을 반환
double nextDouble():0.0 보다 크거나 같고 1.0 보다 작은 double 형 값을 반환
자바프로그래밍 강원대학교 22
java.util.Random
Random random = new Random();
int die = random.nextInt(6) + 1;
자바프로그래밍 강원대학교 23
java.util.Random
• 항상 같은 순서의 “임의의” 수가 생성되도록 하는 방법
– Random(...) 에 long 타입 “시드 (seed)” 를 준다 .
– Random rand = new Random(12345678);
//123456768 는 시드
자바프로그래밍 강원대학교 24
• 실습과제 4
자바프로그래밍 강원대학교 25
객체간 상호작용
Object Interaction
자바프로그래밍 강원대학교 26
clock example
자바프로그래밍 강원대학교 27
15:06
• 복잡도에 따라– 하나의 클래스로 구현– 작은 클래스로 분해
자바프로그래밍 강원대학교 28
15:06
모듈화와 추상화modularization and abstraction
자바프로그래밍 강원대학교 29
모듈화와 추상화modularization and abstraction
자바프로그래밍 강원대학교 30
모듈화와 추상화modularization and abstraction
자바프로그래밍 강원대학교 31
15:06
clock clock
rollover counter
자바프로그래밍 강원대학교 32
15:06
clock clock
rollover counter
public class RolloverCounter {
private int limit;private int value;
// 구성자와 메소드 생략}
public class Clock {
private RolloverCounter hours;private RolloverCounter minutes;
// 구성자와 메소드 생략}
자바프로그래밍 강원대학교 33
:Clock
hoursminutes
:Rollover-Counter
15
:Rollover-Counter
06
Clock
Rollover-Counter
Object diagram
Class diagram
referencing
using
Clockpublic class Clock {
private RolloverCounter hours;private RolloverCounter minutes;
public Clock()public Clock(int hour, int minute)public void timeTick()public void setTime(int hour, int minute)public String getTime()
}
자바프로그래밍 강원대학교 34
RolloverCounterpublic class RolloverCounter {
private int limit;private int value;
public RolloverCounter(int rollOverLimit)public int getValue()public String getTwoDigitString()public void setValue(int replacementValue)public void increment()
}
자바프로그래밍 강원대학교 35
• 실습과제 5, 6, 7
자바프로그래밍 강원대학교 36
java.util.Scanner
Scanner in = new Scanner(System.in);
String st = in.next(); // 한 단어String line = in.nextLine(); // 현재 줄의 끝까지int i = in.nextInt(); // 정수 하나
자바프로그래밍 강원대학교 37
java.util.Scanner
next() nextLine()
nextInt() nextShort() nextLong() nextDouble() nextFloat() nextBoolean()
자바프로그래밍 강원대학교 38
nextLine() 메소드• Scanner 를 현재 위치에서 다음 줄의 첫머리로 이동시키고 , 그
사이에 있는 모든 문자들로 구성된 String 객체를 ( 가리키는 참조를 ) 반환한다 .
• 행 분리 기호 (new line) 제외 , 공백문자 (space) 포함
자바프로그래밍 강원대학교 39
nextLine() 메소드
String message = input.nextLine();int num = input.nextInt() ;
< 입력 >Hello 8
< 실행 결과 >message 는 “ Hello” 를 가리킴num 은 8
.
자바프로그래밍 강원대학교 40
nextLine() 메소드
int num = input.nextInt() ;String message = input.nextLine();
< 입력 >8Hello
< 실행 결과 >num 은 8
message 는 "" ( 빈 문자열 ) 을 가리킴.
자바프로그래밍 강원대학교 41
nextLine() 메소드
• 문장들을 한 행씩 읽기 위해 nextLine() 을 사용할 때는 보통 문제가 없다 .
• next(), nextInt(), nextDouble() 과 같은 다른 Scan-ner 호출과 nextLine() 을 혼합하여 사용할 때는 주의해야 한다 .
자바프로그래밍 강원대학교 42
Strings
자바프로그래밍 강원대학교 43
Strings are objects
String 은 기본 (primitive) 데이터 타입이 아니다 .Sting 은 객체이므로 여러 가지 메소드를 갖는다 .
String lang = new String("Java");System.out.println(lang.isEmpty());System.out.println(lang.length());
자바프로그래밍 강원대학교
false4
44
String Literal
String literal - "Java", "123", ""
"java" 라는 내용을 갖는 String 객체를 만든다는 점에서 아래 두 문장이 같은 효과를 갖는다 .
String lang = "Java"; String lang = new String("Java");
자바프로그래밍 강원대학교 45
String - Immutable• 자바 String 객체는 변경할 수 없다 . 읽기 전용 (read-only)
이다 . • No mutator method• No exposed field
• String s = "E.T."; s = s.toLowerCase();
새 객체가 만들어진다 .
s"E.T"
s"E.T"
"e.t"
자바프로그래밍 강원대학교 46
String concatenation
String s = " 꽃이 " + " 되었다 .";
새 객체가 만들어진다 .
" 꽃이 "
" 되었다 ."
s" 꽃이 되었
다 ."
자바프로그래밍 강원대학교 47
StringBuiler - Mutable• StringBuiler 객체는 변할 수 있다 .
• String s = "E.T."; s.setCharAt(0, 'e'); s.setCharAt(2, 't');
기존 객체의 내용이 변한다 .
s"E.T" "e.t"
s
자바프로그래밍 강원대학교 48
String concatenation
StringBuilder sb = " 꽃이 ";sb.add(" 되었다 .");
기존 객체가 변한다 .
" 꽃이 "sb
" 꽃이 되었다 ."
sb
" 되었다 ."
자바프로그래밍 강원대학교 49
StringBuilder 클래스StringBuilder 객체를 생성하기 위해서는 new 연산자를 사용한다 :
StringBuilder s = new StringBuilder(); // 초기 용량은 16 개 문자StringBuilder s = new StringBuilder(50); // 초기 용량은 50 개의 문자StringBuilder s = new StringBuilder (“Hello”); // s 를 “ Hello” 로 초기화
StringBuilder 객체의 용량은 프로그램이 실행될 때 필요한 만큼 자동적으로 확장된다 .
자바프로그래밍 강원대학교 50
따옴표를 포함하는 문자열
System.out.print(" 그가 " 사랑해요 " 라고 말했다 .");
System.out.print(" 그가 \" 사랑해요 \" 라고 말했다 .");
자바프로그래밍 강원대학교
O
X
51
Multiline strings
System.out.print(" 그대가 \n" + " 곁에 있어도 \n" + " 나는 그대가 그립다 .");
그대가 곁에 있어도나는 그대가 그립다 .
자바프로그래밍 강원대학교 52
String 메소드
자바프로그래밍 강원대학교 53
char[] crs = {'K', 'a', 'n', 'g', 'W', 'o', 'n' };String s = new String(crs);
System.out.println(s.charAt(0));System.out.println(s.charAt(s.length()-1));
System.out.println(s.indexOf('n'));System.out.println(s.lastIndexOf('n'));
System.out.println(s.contains("K"));System.out.println(s.contains("f"));
char[] elements = s.toCharArray();for (char el : elements) System.out.println(el);
자바프로그래밍 강원대학교
Kn26truefalseKangwon
54
StringBuilder sb = new StringBuilder(" 강원대학교 ");
sb.deleteCharAt(sb.length()-1);
sb.append(' 교 ');
sb.insert(0, ' 우 ');sb.insert(1, ' 리 ');sb.insert(2, ' ');
sb 를 출력하면 ?
자바프로그래밍 강원대학교 55
Comparing stringsString a = "Kangwon"; String b = "kangwon";
System.out.println(a.equals(b));
자바프로그래밍 강원대학교
"Kangwon"
네가 b 와내용이 같니 ?
예
a
"Kangwon"
b
56
Comparing stringsString a = "Kangwon"; String b = "KANGWON";
System.out.println(a.equals(b));System.out.println(a.equalsIgnoreCase(b)); // 대소문자 무시
String c = input.nextLine();System.out.println("Kangwon".equals(c)); // 입력된 단어가 일치하나 ?
// 아래 문장 – 같은 기능이지만 주의가 필요함 !// c 가 null 일 때는 실행시간 오류 (NullPointerException) 발생 !System.out.println(c.equals("Kangwon"));
자바프로그래밍 강원대학교 57
Test for reference equalityString a = new String("Kangwon"); String b = new String("Kangwon");
System.out.println(a == b);
자바프로그래밍 강원대학교
"Kangwon"
a 와 b 가 같은 객체를 가리키나 ?
false
a
"Kangwon"
b
58
Interning string literals• 코드에 등장하는 모든 String literal 들은 프로그램이
실행되기 전에 추려서 정리 (intern) 된다 .
• 같은 리터럴이 두 개 있으면 하나만 저장된다 .
• String 타입 참조 (reference) 들은 이 리터럴을 가리킨다 .
자바프로그래밍 강원대학교 59
String a = " 가만히 "; String b = " 가만히 ";String c = " 있어라 ";
" 가만히 "" 있어라 "
a
b
c
Interningboolean a = "Kangwon" == "Kangwon";boolean b = "Kangwon" == new String("Kangwon"); // 실행 시 새로 만들어짐boolean c = "Kangwon" == "Kang" + "won"; // 실행 전에 연결되고 in-tern 됨boolean d = "Kangwon" == new String("Kangwon").intern(); // 강제로 인턴boolean e = "Kangwon" == " Kangwon ".trim(); // 실행 시 새로 만들어짐
System.out.println(a);System.out.println(b);System.out.println(c);System.out.println(d);System.out.println(e);
자바프로그래밍 강원대학교
truefalsetruetruefalse
60
이쪽의 내용은 지엽적이고 세부적인 내용으로서 참고 자료임 : 시험이 나오지 않음 ☺
String 메소드
자바프로그래밍 강원대학교 61
String 메소드
char charAt(int index)
인덱스 i 에 있는 문자를 반환한다 . 문자열의 인덱스는 0 부터 시작된다 .
< 예 >String s = “Titanic”;System.out.print(s.charAt(3)); --> a
자바프로그래밍 강원대학교 62
String 메소드 int compareTo(String t)
s.compareTo(t)문자의 ASCII 값을 사용하여 두 개의 문자열을 한 문자씩 차례로 비교한다 .
s < t 음수를 반환 s == t 0 을 반환 s > t 양수를 반환
String s = “Shrek”;String t = “Star Wars”;s.compareTo(t) 음수를 반환s.compareTo(s) 0 을 반환
자바프로그래밍 강원대학교 63
String 메소드 int compareTolgnoreCase(String t)
compareTo(...) 와 비슷하지만 대소문자를 구분하지 않는다 .
String s = “E.T.”;String t = “e.t.”;
s.compareToIgnorecase(t) --> 0
자바프로그래밍 강원대학교 64
String 메소드boolean endsWith(String suffix)boolean startsWith(String prefix)
s.endsWith(t) s 가 t 로 끝나면 참을 반환
s.endsWith(t) s 가 t 로 시작하면 참을 반환
String s = “Forrest Gump”;s.endsWith(“ump”) --> true
자바프로그래밍 강원대학교 65
String 메소드int indexOf(String t)
s.indexOf(t)s 에서 t 가 처음 나타나는 지점의 인덱스를 반환만약 s 에 t 가 들어 있지 않다면 -1 을 반환
String s = "The Lord Of The Rings";s.indexOf("The") returns 0;s.indexOf("Bilbo") returns –1.
자바프로그래밍 강원대학교 66
String 메소드int indexOf(String t, int from)
s.indexOf(t, from)s 에 t 가 들어 있는지 찾되 from 위치 이후에서만 찾는다 . t 가 처음 나타나는 지점의 인덱스를 반환없으면 -1 을 반환
String s = "The Lord Of The Rings";s.indexOf("The", 6) --> 12
자바프로그래밍 강원대학교 67
String 메소드int length( )
s.length()s 에 있는 문자들의 수를 반환한다 .
String s = “Jaws”;s.length() --> 4
자바프로그래밍 강원대학교 68
String 메소드String replace( char oldChar, char newChar)
s.replace(oldCh, newCh)s 에 들어 있는 모든 oldCh 를 newCh 로 바꾸어 얻어진 새 문자열을 반환
String s = “Harry Potter”;s.replace (‘r’,’m’) --> “Hammy Pottem”
자바프로그래밍 강원대학교 69
String 메소드String substring(int index)
s.substring(index)index 이후의 내용으로 새 문자열을 만들어 반환한다 .
String s = “The Sixth Sense”;s.substring(7) --> “th Sense”
자바프로그래밍 강원대학교 70
String 메소드String substring(int start, int end)
s.substring(start, end)start 부터 end 직전까지의 내용으로 새 문자열을 만들어 반환(inclusive) (exclusive)
String s = “TheSixthSense”;s.substring(1, 3) --> “he”
자바프로그래밍 강원대학교 71
String 메소드String toLowerCase()String toUpperCase()
s.toLowerCase()모든 대문자를 소문자로 바꾼 새 문자열을 만들어 반환s.upperCase()모든 소문자를 대문자로 바꾼 새 문자열을 만들어 반환
String s = “The Lion King”;s.toLowerCase() --> “the lion king”
자바프로그래밍 강원대학교 72
String 메소드String trim()
s.trim()문자열의 앞과 뒤에 있는 공백을 제거한 문자열을 새로 만들어 반환한다 .
String s = “ Attack of the Killer Tomatoes “;s.trim() --> “Attack of the Killer Tomatoes”
자바프로그래밍 강원대학교 73
• 실습과제 8, 9
자바프로그래밍 강원대학교 74
프로그래밍 스타일
자바프로그래밍 강원대학교 75
자바프로그래밍 강원대학교
프로그래밍 스타일클래스 이름은 명사 , 대문자로 시작
Dog, System
변수 이름은 소문자로 시작name, age
상수는 모두 대문자로MAX_NUMBER, RED_COLOR
메소드 이름은 동사 , 소문자로 시작int getAge(){ return 25;}
int luckyNumber = 13;double pi = 3.14195;String greeting = "Hello, World!";PrintStream printer = System.out;
76
자바프로그래밍 강원대학교
프로그래밍 스타일
코드 블럭while (!done) { doSomething(); done = moreToDo();}
클래스 , 메소드class Man{ int age; int height;}
int add(int a, int b){ return a+b;}
들여쓰기 (indentation) 반드시 할 것
77
자바프로그래밍 강원대학교
식별자 (Identifiers)
• 식별자 : 변수 , 메소드 , 클래스 등의 이름• 식별자 규정
– Letters, 숫자 , underscore (_) 로 구성– 숫자로 시작할 수 없다 . – 식별자 내부 공백 불가– 예약어 사용 불가– 대소문자 구분
(O) love_Him, love4ever(X) 4love, love Him, for, love?him, love!
78
끝 .
자바프로그래밍 강원대학교 79