Download presentation
Presentation is loading. Please wait.
Published byΠερσεφόνη Βιτάλης Modified 6년 전
1
윤 홍 란 hryun@sookmyung.ac.kr
제3장 클래스와 객체의 사용-1 윤 홍 란
2
클래스와 객체의 사용 3장 내용 객체 생성 과 객체 참조 String 클래스와 그 메쏘드들 Java 표준 클래스 라이브러리
Random과 Math 클래스들 출력 포맷 열거 타입(enumerated type) 포장 클래스(wrapper class) 그래픽 컴포넌트와 컨테이너 레이블과 이미지
3
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지
4
객체 생성 변수 클래스 이름 객체 참조 변수(object reference variable)
기본 타입 값 혹은 객체에 대한 참조를 저장한다. int num; 정수값을 저장할 수 있는 변수 num을 생성 클래스 이름 객체 참조 변수선언을 위한 타입 이름에는 클래스 이름이 들어간다. String title; String객체에 대한 참조(reference)를 저장하는 String변수 title을 하나 생성 이 선언으로 객체가 생성되는 것은 아님! 객체변수는 객체 그 자체를 저장하는 것이 아니라 객체의 주소를 저장 객체 참조 변수(object reference variable) 객체의 주소 저장 객체 자체는 별도로 생성되어야 한다. =>new
5
title = new String ("Java Software Solutions");
객체 생성 new 연산자 사용하여 객체 생성 실체화(instantiation) 객체 생성 =>객체는 클래스의 실체(instance)이다. title = new String ("Java Software Solutions"); String 구성자 호출: 객체를 구성하는 특수 메쏘드
6
메쏘드 호출(Method invocation)
도트 연산자(dot operator ) 객체 생성 후에 도트 연산자를 사용하여 메쏘드 호출 count = title.length() 메쏘드는 값을 반환(return) 할 수 있다. 반환 값은 배정 혹은 수식에서 사용됨 메쏘드 호출 객체에 서비스를 요청하는 것으로 생각할 수 있다. title = new String ("Java Software Solutions"); String title; title=new String(“Java Software Solutions”); String title=new String(“Java Software Solutions”); String title; title=“Java Software Solutions”; String은 기본데이터타입은 아니나 많이 사용되기때문에 new를 생략하고 사용 가능 String title=“Java Software Solutions”;
7
참조(Reference) 비교 객체 참조 38 num1 "Steve Jobs" name1 기본 타입 변수는 값을 저장하고
객체 참조 변수는 객체의 주소를 저장한다. 객체 참조 객체의 위치에 대한 포인터로 생각할 수 있다. 주소로 표시하는 대신에 화살표를 사용한다. 38 num1 "Steve Jobs" name1
8
배정(Assignment) Before: After: 배정은 값을 복사하여 변수에 저장한다. 기본 타입: 38 num1 96
num2 = num1; num1 38 num2 After:
9
참조 배정(Reference Assignment)
객체 참조 배정은 주소를 복사하여 저장한다 ! "Steve Jobs" name1 Before: "Steve Wozniak" name2 name2 = name1; "Steve Jobs" name1 After: name2
10
별명(Alias) 별명 별명은 유용하지만 조심해야 한다 ! 한 객체를 참조하는 두 개 이상의 참조 변수들
한 객체를 여러 참조 변수들을 이용하여 접근할 수 있다. 별명은 유용하지만 조심해야 한다 ! 실제로는 한 객체만 존재하므로 어떤 참조를 통해 그 객체를 변경하면 다른 모든 이명 참조들도 변경하게 된다. * name1과 name2는 별명(alias)
11
쓰레기 수집(Garbage Collection)
객체에 대한 유효한 참조가 없으면 더 이상 사용될 수 없다. 이 객체는 쓰레기가 된다. 자동 쓰레기 수집 Java는 정기적으로 자동 쓰레기 수집을 하여 사용되지 않는 메모리를 시스템에 돌려준다. 다른 언어의 쓰레기 수집 프로그래머가 직접 해야 한다.
12
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지
13
String 클래스 스트링 생성 title = "Java Software Solutions";
new 연산자 없이 String 객체를 생성할 수 있다. title = "Java Software Solutions"; 이것은 스트링에만 적용되는 특별한 경우 " … "은 String 객체를 나타낸다. title = new String("Java Software Solutions");
14
String 메쏘드 String 객체가 생성되면
값도 길이도 변경할 수 없다. => 메소드를 통해야만 가능 String 객체는 변경 불능(immutable) String 클래스의 어떤 메쏘드는 변경된 스트링을 반환 - 125페이지 [그림3.1] String toLowerCase ( ) String replace (char oldChar, char newChar) String substring (int offset, int endIndex) String concat (String str)
15
String 인덱스(첨자) 스트링 내의 특정 문자 참조 스트링 "Hello" 인덱스를 사용해서 인덱스는 0부터 시작
16
StringMutation.java public class StringMutation {
public static void main (String[] args) { String phrase = "Change is inevitable"; String mutation1, mutation2, mutation3, mutation4; System.out.println ("Original string: \"" + phrase + "\""); System.out.println ("Length of string: " + phrase.length()); mutation1 = phrase.concat (", except from vending machines."); mutation2 = mutation1.toUpperCase(); mutation3 = mutation2.replace ('E', 'X'); mutation4 = mutation3.substring (3, 30); System.out.println ("Mutation #1: " + mutation1); // 변형된 각 스트링을 프린트한다 System.out.println ("Mutation #2: " + mutation2); System.out.println ("Mutation #3: " + mutation3); System.out.println ("Mutation #4: " + mutation4); System.out.println ("Mutated length: " + mutation4.length()); } }
17
Outline 객체 생성 String 클래스 패키지 출력 포맷 열거 타입 포장 클래스 컴포넌트와 컨테이너 이미지
18
Class 라이브러리 클래스 라이브러리(class library)
프로그램 개발을 지원하는 클래스들의 모음 Java 표준 클래스 라이브러리(standard class library) Java 개발 환경의 일부 System , Scanner, String 도 클래스 라이브러리에 속해있음
19
패키지(Package) Java 표준 클래스 라이브러리는 패키지로 조직된다. 일부 패키지들 패키지 java.lang
129페이지 [그림3.2] 참조 패키지 java.lang java.applet java.awt javax.swing java.net java.util javax.xml.parsers 목적 일반적인 지원 애플릿 그래픽/그래픽 사용자 인터페이스 추가 그래픽 기능 네트워크 통신 유틸리티 XML 문서 처리
20
import 선언 패키지 내의 클래스 사용 패키지 내의 모든 클래스 전입 import java.util.*;
이름을 완전 지정(fully qualified name) java.util.Scanner 형태로 Scanner클래스를 사용할 때마다 패키지 와 클래스이름을 완전히 지정하는 일은 무척 번거로움 import 후 클래스 이름만 사용 import java.util.Scanner; 패키지 내의 모든 클래스 전입 import java.util.*; Scanner 클래스 java.util.Scanner import 해야 함
21
Random 클래스 java.util.Random 의사난수 발생기
Random 객체는 종자 값(seed value)을 이용하여 복잡한 계산을 수행하여 난 수를 발생시킨다. 132페이지 [그림3.3] Random클래스의 메소드 참조
22
RandomNumbers.java // Random 클래스를 사용한 의사난수의 생성을 보여준다.
import java.util.Random; public class RandomNumbers { // // 다양한 범위에 속하는 난수를 발생 public static void main (String[] args) { Random generator = new Random(); int num1; float num2; num1 = generator.nextInt(); System.out.println ("A random integer: " + num1); num1 = generator.nextInt(10); System.out.println ("From 0 to 9: " + num1);
23
RandomNumbers.java num1 = generator.nextInt(10) + 1;
System.out.println ("From 1 to 10: " + num1); num1 = generator.nextInt(15) + 20; System.out.println ("From 20 to 34: " + num1); num1 = generator.nextInt(20) - 10; System.out.println ("From -10 to 9: " + num1); num2 = generator.nextFloat(); System.out.println ("A random float (between 0-1): " + num2); num2 = generator.nextFloat() * 6; // 0.0 to num1 = (int)num2 + 1; System.out.println ("From 1 to 6: " + num1); } }
24
Math 클래스 Math 클래스 수학 함수 java.lang 패키지의 일부 다양한 수학 함수 포함
절대값(absolute value) 제곱근(square root) 지수승(exponentiation) 삼각함수(trigonometric function)
25
value = Math.cos(90) + Math.sqrt(delta);
Math 클래스의 메쏘드는 정적 메쏘드(static method) 정적 메쏘드 new를 이용하여 객체 생성 없이 클래스 이름을 통해서 호출 가능 value = Math.cos(90) + Math.sqrt(delta); 정적메소드는 6장에서 자세히 배웁니다. 134페이지 [그림3.4] Math클래스의 메소드들
26
Quadratic.java import java.util.Scanner;
public class Quadratic { // 이차방정식의 근을 결정한다. public static void main (String[] args) { int a, b, c; // ax^2 + bx + c double discriminant, root1, root2; Scanner scan = new Scanner (System.in); System.out.print ("Enter the coefficient of x squared: "); a = scan.nextInt(); System.out.print ("Enter the coefficient of x: "); b = scan.nextInt(); System.out.print ("Enter the constant: "); c = scan.nextInt(); discriminant = Math.pow(b, 2) - (4 * a * c); root1 = ((-1 * b) + Math.sqrt(discriminant)) / (2 * a); root2 = ((-1 * b) - Math.sqrt(discriminant)) / (2 * a); System.out.println ("Root #1: " + root1); System.out.println ("Root #2: " + root2); } }
Similar presentations