명품 JAVA Essential 1
2 학습목표 1. 패키지와모듈개념이해 2. 사용자패키지만들기 3. 자바에서제공하는표준패키지 4. Object 클래스활용 5. 박싱 / 언박싱을이해하고 Wrapper 클래스활용 6. String과 StringBuffer 클래스활용 7. StringTokenizer 클래스활용 8. Math 클래스활용
패키지개념과필요성 3 * 3 명이분담하여자바응용프로그램을개발하는경우, 동일한이름의클래스가존재할가능성있음 -> 합칠때오류발생가능성 -> 개발자가서로다른디렉터리로코드관리하여해결
개발자가서로다른디렉터리로코드관리 4 이름은같지만경로명이달라서도다른파일로취급
자바의패키지와모듈이란? 5 패키지 (package) 서로관련된클래스와인터페이스를컴파일한클래스파일들을묶어놓은디렉터리 하나의응용프로그램은한개이상의패키지로작성 패키지는 jar 파일로압축할수있음 모듈 (module) 여러패키지와이미지등의자원을모아놓은컨테이너 하나의모듈을하나의.jmod 파일에저장 Java 9 부터모듈화도입 플랫폼의모듈화 Java 9 부터자바 API 의모든클래스들 ( 자바실행환경 ) 을패키지기반에서모듈들로완전히재구성 응용프로그램의모듈화 클래스들은패키지로만들고, 다시패키지를모듈로만듦 모듈프로그래밍은어렵고복잡. 기존방식으로프로그램작성
자바의모듈화의목적 6 모듈화의목적 Java 9 부터자바 API 를여러모듈 (99 개 ) 로분할 Java 8 까지는 rt.jar 의한파일에모든 API 저장 응용프로그램이실행할때꼭필요한모듈들로만실행환경구축 메모리자원이열악한작은소형기기에꼭필요한모듈로구성된작은크기의실행이미지를만들기위함 모듈의현실 Java 9 부터전면적으로도입 복잡한개념 큰자바응용프로그램에는개발, 유지보수등에적합 현실적으로모듈로나누어자바프로그램을작성할필요없음
자바 API 의모듈파일들 7 자바 JDK 에제공되는모듈파일들 자바가설치된 jmods 디렉터리에모듈파일존재.jmod 확장자를가진파일 jdk 10의경우 99개모듈파일 모듈파일은 ZIP 포맷으로압축된파일모듈파일에는자바 API의패키지와클래스들이들어있음 jmod 명령을이용하여모듈파일에들어있는패키지를풀어낼수있음 jdk 10 이설치된폴더 자바 API 의모듈 ( 모듈파일 )
java.base.jmod 파일을풀어놓은사례 8 java.base.jmod 파일을풀면다음과같이 java.base 모듈에있는패키지와클래스를볼수있다. 클래스의이름 ( 경로명 ) java.util.scanner 패키지명 패키지명 : java.util java.util 패키지에속한클래스
패키지사용하기, import 문 9 다른패키지에작성된클래스사용 import 를이용하지않는경우 소스에클래스이름의완전경로명사용 public class ImportExample { public static void main(string[] args) { java.util.scanner scanner = new java.util.scanner(system.in); 필요한클래스만 import 소스시작부분에클래스의경로명 import import 패키지. 클래스 소스에는클래스명만명시하면됨 패키지전체를 import 소스시작부분에패키지의경로명.* import import 패키지.* 소스에는클래스명만명시하면됨 import java.util.*; java.util 패키지내의모든클래스만을지정, 하위패키지의클래스는포함하지않음 import java.util.scanner; public class ImportExample { public static void main(string[] args) { Scanner scanner = new Scanner(System.in); import java.util.*; public class ImportExample { public static void main(string[] args) { Scanner scanner = new Scanner(System.in);
패키지만들기 10 클래스파일 (.class) 이저장되는위치는? 클래스나인터페이스가컴파일되면클래스파일 (.class) 생성 클래스파일은패키지로선언된디렉터리에저장 패키지선언 소스파일의맨앞에컴파일후저장될패키지지정 package 패키지명 ; package UI; // 아래 Tools 를컴파일하여 UI 패키지 (UI 디렉토리 ) 에저장할것지시 public class Tools {... Tools 클래스의경로명은 UI.Tools 가됨 package Graphic; // 아래 Line 클래스를 Graphic 패키지에저장 import UI.Tools; // UI.Tools 클래스의경로명임포트 public class Line extends Shape { public void draw() { Tools t = new Tools();
디폴트패키지 11 package 선언문이없는자바소스파일의경우 컴파일러는클래스나인터페이스를디폴트패키지에소속시킴 디폴트패키지 현재디렉터리
이클립스로쉽게패키지만들기 12 예제로사용할샘플소스 (5 장의예제 5-5) abstract class Calculator { public abstract int add(int a, int b); public abstract int subtract(int a, int b); public abstract double average(int[] a); lib 패키지에 public class GoodCalc extends Calculator { app 패키지에 public int add(int a, int b) { return a+b; public int subtract(int a, int b) { return a - b; public double average(int[] a) { double sum = 0; for (int i = 0; i < a.length; i++) sum += a[i]; return sum/a.length; public static void main(string [] args) { Calculator c = new GoodCalc(); System.out.println(c.add(2,3)); System.out.println(c.subtract(2,3)); System.out.println(c.average(new int [] {2,3,4 )); Calculator 클래스는 lib 패키지에 GoodCalc 클래스는 app 패키지에나누어저장하는응용프로그램을이클립스를이용하여만들기
13 프로젝트작성 ( 프로젝트이름 : PackageEx)
14 패키지 lib, app 작성
패키지작성이완료된결과 15 패키지탐색창에 app 패키지와 lib 패키지가보인다.
lib 패키지에클래스 Calculator 만들기 Calculator 클래스를 public abstract 속성으로생성한다. 16
Calculator 소스작성후수정 다른패키지, 즉 app 패키지의클래스에서접근할수있도록하기위해클래스의접근지정자 public 을반드시삽입. 17
app 패키지에 GoodCalc.java 작성후수정 import 문삽입. Calculator 클래스를사용하기위해서는패키지를포함하는정확한경로명을컴파일러에게알려줘야함. 18
실행을위한 Run Configurations 작성 푸시다운버튼을누르면아래메뉴가보인다. main() 메소드를가진클래스를지정한다. 19
20 프로젝트 PackageEx 실행
모듈개념 21 모듈 Java 9에서도입된개념 패키지와이미지등의리소스를담은컨테이너 모듈파일 (.jmod) 로저장 클래스파일클래스 파일클래스파일 패키지 A 클래스파일클래스파일 패키지 A 클래스파일클래스파일 패키지 B 모듈 N... 이미지등리소스 클래스파일클래스 파일클래스파일 패키지 B 클래스파일클래스 파일클래스파일 패키지 C 클래스파일클래스파일 패키지 K 클래스파일클래스파일 패키지 L 모듈 M 이미지등리소스 Java 8 에서클래스와패키지 Java 9 이후클래스와패키지, 그리고모듈
자바플랫폼의모듈화 22 자바플랫폼 자바의개발환경 (JDK) 과자바의실행환경 (JRE) 을지칭 Java SE( 자바 API) 포함자바 API의모든클래스가여러개의모듈로재구성됨 모듈파일은 JDK 의 jmods 디렉터리에저장하여배포 모듈파일로부터모듈을푸는명령 jmod extract "C:\Program Files\Java\jdk-10\jmods\java.base.jmod - 현재디렉터리에 java.base 모듈이풀림
jmods 디렉터리에들어있는자바 API 의모듈파일들 java.base.jmod 모듈파일풀기 jmod extract "C:\Program Files\Java\jdk-10\jmods\java.base.jmod java.base 모듈에들어있는패키지들 java.util 패키지에들어있는자바 API 클래스들 23
모듈기반의자바실행환경 24 자바실행환경 JRE : 디폴트자바실행환경 자바모듈 ( 컴파일된자바 API 클래스들 ), 자바가상기계등으로구성 비교관점 Java 8 까지 Java 9 이후 자바 API 클래스의컨테이너 rt.jar 의단일체에자바 API 의패키지들을모두담음 rt.jar 를버렸음 자바 API 를많은수 (99 개 ) 의모듈파일에나누어저장 디폴트실행환경 실행되는컴퓨터에 rt.jar 설치 (rt.jar 의크기가큼 ) modules(jre 의 lib 밑에 ) 비공개파일 (109MB) 에모듈저장 응용프로그램실행시 modules 파일에서필요한모듈및클래스로딩 맞춤형실행환경 (custom JRE) 없음 소형기기에 rt.jar 를설치할수없는한계 맞춤형실행환경구축가능 jlink 명령을이용하여응용프로그램의실행에필요한모듈들로실행환경구축가능 ( 홈페이지설명과예제있음 ) 메모리가열악한소형기기에도응용프로그램실행가능예 ) DB 액세스가필요없고오직기본자바 API 만필요한소형 IoT 장치에는 java.base 모듈만있으면됨
자바실행환경비교 25 자바응용프로그램 자바 API 사용 클래스클래스 rt.jar 클래스로딩 모듈기반자바응용프로그램 자바 API 사용 클래스클래스 modules 클래스로딩 jlink 를이용하여타켓컴퓨터에실행될커스텀 JRE 를만드는경우 모듈기반자바응용프로그램 자바 API 사용 클래스클래스 custom modules 클래스로딩 JVM(Java 9 이전 ) JVM(java 9 이후 ) JVM(java 9 이후 ) (a) Java 9 이전실행환경 (b) Java 9 이후실행환경 (c) Java 9 이후커스텀실행환경 * 홈페이지의자료에, jlink 로맞춤형실행환경을만드는예제있음. 실제로만들어보면커스텀 JRE 가생기고, lib 디렉터리밑에 modules 파일의크기가현저히줄어든것을볼수있고, 실행중에차지하는메모리의량도줄어든것을확인할수있음
자바모듈화의목적 26 가장큰목적 자바컴포넌트들을필요에따라조립하여사용하기위함 컴퓨터시스템의불필요한부담감소 세밀한모듈화를통해필요없는모듈이로드되지않게함 소형 IoT 장치에도자바응용프로그램이실행되고성능을유지하게함
자바모듈과패키지구조 java.desktop 모듈 java java.base 모듈 java.rmi 모듈 applet awt beans io lang math time text nio net security util rmi sql beancontext spi java.sql 모듈 color datatransfer dnd event font geom im image print channels charset spi renderable spi spi annotation instrument management ref reflect acl cert spec interfaces concurrent jar logging prefs regex spi zip atomic locks activation dgc registry server 패키지들 27
JDK 의주요패키지 28 java.lang 스트링, 수학함수, 입출력등자바프로그래밍에필요한기본적인클래스와인터페이스 자동으로 import 됨 - import 문필요없음 java.util 날짜, 시간, 벡터, 해시맵등과같은다양한유틸리티클래스와인터페이스제공 java.io 키보드, 모니터, 프린터, 디스크등에입출력을할수있는클래스와인터페이스제공 java.awt GUI 프로그램을작성하기위한 AWT 패키지 javax.swing GUI 프로그래밍을작성하기위한스윙패키지
Object 클래스 29 특징 모든자바클래스는반드시 Object 를상속받도록자동컴파일 모든클래스의수퍼클래스 모든클래스가상속받는공통메소드포함 주요메소드
객체속성 30 Object 클래스는객체의속성을나타내는메소드제공 hashcode() 메소드 객체의해시코드값을리턴하며, 객체마다다름 getclass() 메소드 객체의클래스정보를담은 Class 객체리턴 Class 객체의 getname() 메소드는객체의클래스이름리턴 tostring() 메소드 객체를문자열로리턴
예제 6-1 : Object 클래스로객체속성알아내기 31 Object 클래스를이용하여객체의클래스명, 해시코드값, 객체의문자열을출력해보자. class Point { private int x, y; public Point(int x, int y) { this.x = x; this.y = y; public class ObjectPropertyEx { public static void main(string [] args) { Point p = new Point(2,3); System.out.println(p.getClass().getName()); // 클래스이름 System.out.println(p.hashCode()); // 해시코드값 System.out.println(p.toString()); // 객체의문자열 Point 22279806 Point@153f67e 해시코드의 16 진수값. 이값은실행할때마다달라질수있음.
tostring() 메소드, 객체를문자열로변환 32 각클래스는 tostring() 을오버라이딩하여자신만의문자열리턴가능 객체를문자열로반환원형 public String tostring(); 컴파일러에의한 tostring() 자동변환 객체 + 문자열 -> 객체.toString() + 문자열 로자동변환객체를단독으로사용하는경우 -> 객체.toString() 으로자동변환 Point a = new Point(2,3); String s = a + " 점 "; System.out.println(s); 자동변환 자동변환 Point a = new Point(2,3); String s = a.tostring()+ " 점 "; System.out.println(s.toString());
예제 6-2 : Point 클래스에 tostring() 작성 33 Point 클래스에 Point 객체를문자열로리턴하는 tostring() 메소드를작성하라. class Point { private int x, y; public Point(int x, int y) { this.x = x; this.y = y; public String tostring() { return "Point(" + x + "," + y + ")"; public class ToStringEx { public static void main(string [] args) { Point a = new Point(2,3); System.out.println(a.toString()); System.out.println(a); // a 는 a.tostring() 으로자동변환됨 Point(2,3) Point(2,3)
객체비교 (==) 와 equals() 메소드 34 == 연산자 객체레퍼런스비교 Point a = new Point(2,3); Point b = new Point(2,3); Point c = a; if(a == b) // false System.out.println("a==b"); if(a == c) // true System.out.println("a==c"); a==c boolean equals(object obj) 두객체의내용물비교객체의내용물을비교하기위해클래스의멤버로작성
예제 6-3 : Point 클래스의 equals() 작성 35 Point 클래스에 x, y 점좌표가같으면 true 를리턴하는 equals() 를작성하라. class Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; public boolean equals(object obj) { Point p = (Point)obj; // obj 를 Point 타입으로다운캐스팅 if(x == p.x && y == p.y) return true; else return false; 이 Point 객체와객체 p 가같은지비교 public class EqualsEx { public static void main(string[] args) { Point a = new Point(2,3); Point b = new Point(2,3); Point c = new Point(3,4); if(a == b) System.out.println("a==b"); if(a.equals(b)) System.out.println("a is equal to b"); if(a.equals(c)) System.out.println("a is equal to c"); a is equal to b
예제 6-4 : Rect 클래스와 equals() 메소드만들기연습 36 int 타입의 width( 너비 ), height( 높이 ) 필드를가지는 Rect 클래스를작성하고, 면적이같으면두 Rect 객체가같은것으로판별하는 equals() 를작성하라. class Rect { int width, height; public Rect(int width, int height) { this.width = width; this.height = height; public boolean equals(rect p) { 이사각형과객체 p의면적비교 Point p = (Point)obj; // obj를 Point 타입으로다운캐스팅 if (width*height == p.width*p.height) return true; else return false; public class RectEx { public static void main(string[] args) { Rect a = new Rect(2,3); // 면적 6 Rect b = new Rect(3,2); // 면적 6 Rect c = new Rect(3,4); // 면적 12 if(a.equals(b)) System.out.println("a is equal to b"); if(a.equals(c)) System.out.println("a is equal to c"); if(b.equals(c)) System.out.println("b is equal to c"); a is equal to b a 와 b 는면적이같으므로 equals() 는같다고판단
Wrapper 클래스 37 Wrapper 클래스 자바의기본타입을클래스화한 8 개클래스를통칭 용도 객체만사용할수있는컬렉션등에기본타입의값을사용하기위해 -> Wrapper 객체로만들어사용
Wrapper 객체생성 38 기본타입의값으로 Wrapper 객체생성 Integer i = Integer.valueOf(10); Character c = Character.valueOf( c ); Double f = Double.valueOf(3.14); Boolean b = Boolean.valueOf(true); Integer i = new Integer(10); Character c = new Character( c ); Double f = new Double(3.14); Boolean b = new Boolean(true); 문자열로 Wrapper 객체생성 Integer I = Integer.valueOf( 10 ); Double d = Double.valueOf( 3.14 ); Boolean b = Boolean.valueOf( false ); Java 9 부터생성자를이용한 Wrapper 객체생성폐기 Integer I = new Integer( 10 ); Double d = new Double( 3.14 ); Boolean b = new Boolean( false ); ` Float 객체는 double 타입의값으로생성가능 Float f = Float.valueOf((double) 3.14);
주요메소드 39 가장많이사용하는 Integer 클래스의주요메소드 다른 Wrapper 클래스의메소드는이와유사
Wrapper 활용 40 Wrapper 객체로부터기본타입값알아내기 Integer i = Integer.valueOf(10); int ii = i.intvalue(); // ii = 10 Character c = Character.valueOf('c' ); char cc = c.charvalue(); // cc = c Double f = Double.valueOf(3.14); double dd = d.doublevalue(); // dd = 3.14 Boolean b = Boolean.valueOf(true); boolean bb = b.booleanvalue(); // bb = true 문자열을기본데이터타입으로변환 int i = Integer.parseInt("123"); // i = 123 boolean b = Boolean.parseBoolean("true"); // b = true double f = Double.parseDouble("3.14" ); // d = 3.14 기본타입을문자열로변환 String s1 = Integer.toString(123); String s2 = Integer.toHexString(123); String s3 = Double.toString(3.14); String s4 = Charater.toString('a'); String s5 = Boolean.toString(true); // 정수 123을문자열 "123" 으로변환 // 정수 123을 16진수의문자열 "7b" 로변환 // 실수 3.14를문자열 "3.14" 로변환 // 문자 a 를문자열 "a" 로변환 // 불린값 true를문자열 "true" 로변환
예제 6-5 : Wrapper 클래스활용 41 다음은 Wrapper 클래스를활용하는예이다. 다음프로그램의결과는무엇인가? public class WrapperEx { public static void main(string[] args) { // Character 사용 System.out.println(Character.toLowerCase('A')); // 'A' 를소문자로변환 char c1='4', c2='f'; if(character.isdigit(c1)) // 문자 c1 이숫자이면 true System.out.println(c1 + " 는숫자 "); if(character.isalphabetic(c2)) // 문자 c2 가영문자이면 true System.out.println(c2 + " 는영문자 "); // Integer 사용 System.out.println(Integer.parseInt("28")); // 문자열 "28" 을 10 진수로변환 System.out.println(Integer.toString(28)); // 정수 28 을 2 진수문자열로변환 System.out.println(Integer.toBinaryString(28)); // 28 을 16 진수문자열로변환 System.out.println(Integer.bitCount(28)); // 28 에대한 2 진수의 1 의개수 Integer i = Integer.valueOf(28); System.out.println(i.doubleValue()); // 정수를 double 값으로변환. 28.0 // Double 사용 Double d = Double.valueOf(3.14); System.out.println(d.toString()); // Double 을문자열 "3.14" 로변환 System.out.println(Double.parseDouble("3.14")); // 문자열을실수 3.14 로변환 // Boolean 사용 boolean b = (4>3); // b 는 true System.out.println(Boolean.toString(b)); // true 를문자열 "true" 로변환 System.out.println(Boolean.parseBoolean("false")); // 문자열을 false 로변환 a 4 는숫자 F 는영문자 28 28 11100 3 28.0 3.14 3.14 true false
박싱과언박싱 42 박싱 (boxing) 기본타입의값을 Wrapper 객체로변환하는것 언박싱 (unboxing) Wrapper 객체에들어있는기본타입의값을빼내는것 박싱의반대 자동박싱과자동언박싱 JDK 1.5 부터박싱과언박싱은자동으로이루어지도록컴파일됨 Integer ten = 10; int n = ten; // 자동박싱. Integer ten = Integer.valueOf(10); 로자동처리 // 자동언박싱. int n = ten.intvalue(); 로자동처리
String 의생성과특징 43 String String 클래스는문자열을나타냄 스트링리터럴 ( 문자열리터럴 ) 은 String 객체로처리됨 스트링객체의생성사례 String str1 = "abcd"; char data[] = {'a', 'b', 'c', 'd'; String str2 = new String(data); String str3 = new String("abcd"); // str2 와 str3 은모두 "abcd" 스트링
스트링리터럴과 new String() 44 스트링리터럴 자바가상기계내부에서리터럴테이블에저장되고관리됨응용프로그램에서공유됨 스트링리터럴사례 ) String s = "Hello"; new String() 으로생성된스트링 스트링객체는힙에생성스트링은공유되지않음
스트링객체의주요특징 45 스트링객체는수정불가능 리터럴스트링이든 new String() 을생성했든객체의문자열수정불가능 예 ) String s = new String("Hello"); String t = s.concat("java"); // s의스트링은수정불가능 // 스트링 s에 "Java" 를덧붙인스트링리턴 스트링비교 두스트링을비교할때반드시 equals() 를사용하여야함 equals() 는내용을비교하기때문
46 주요메소드
String 활용 47 스트링비교, equals() 와 compareto() 스트링비교에 == 연산자절대사용금지 equals() 스트링이같으면 true, 아니면 false 리턴 String java= "Java"; if(java.equals( Java )) // true int compareto(string anotherstring) 문자열이같으면 0 리턴 이문자열이 anotherstring 보다사전에먼저나오면음수리턴 이문자열이 anotherstring 보다사전에나중에나오면양수리턴 String java= "Java"; String cpp = "C++"; int res = java.compareto(cpp); if(res == 0) System.out.println("the same"); else if(res < 0) System.out.println(java + " < " + cpp); else System.out.println(java + " > " + cpp); Java > C++ "java" 가 "C++" 보다사전에나중에나오기때문에양수리턴
String 활용 48 공백제거, String trim() 키보드나파일로부터스트링을입력시, 스트링앞뒤공백이끼는경우가많다. -> trim() 을이용하면스트링앞뒤에있는공백제거 String a = " xyz\t"; String b = a.trim(); // b = "xyz". 빈칸과 '\t' 제거됨
예제 6-6 : String 을활용하여문자열다루기 49 public class StringEx { public static void main(string[] args) { String a = new String(" C#"); String b = new String(",C++ "); 3 System.out.println(a + " 의길이는 " + a.length()); // 문자열의길이 ( 문자개수 ) System.out.println(a.contains("#")); // 문자열의포함관계 true a = a.concat(b); // 문자열연결 System.out.println(a); a = a.trim(); // 문자열앞뒤의공백제거 System.out.println(a); a = " C#, C++ " a = "C#,C++" a = a.replace("c#","java"); // 문자열대치 System.out.println(a); a = "Java,C++" String s[] = a.split(","); // 문자열분리 s[0] = "Java" for (int i=0; i<s.length; i++) s[1] = "C++" System.out.println(" 분리된문자열 " + i + ": " + s[i]); a = a.substring(5); // 인덱스 5 부터끝까지서브스트링리턴 System.out.println(a); char c = a.charat(2); // 인덱스 2 의문자리턴 System.out.println(c); + a = "C++" C# 의길이는 3 true C#,C++ C#,C++ Java,C++ 분리된문자열 0: Java 분리된문자열 1: C++ C++ +
StringBuffer 클래스 50 가변스트링을다루는클래스 StringBuffer 객체생성 StringBuffer sb = new StringBuffer("java"); String 클래스와달리문자열변경가능 가변크기의버퍼를가지고있어문자열수정가능 문자열의수정이많은작업에적합 스트링조작사례 StringBuffer sb = new StringBuffer("This"); sb.append(" is pencil."); sb.insert(7, " my"); sb.replace(8, 10, "your"); System.out.println(sb); // sb = "This is pencil." // sb = "This is my pencil." // sb = "This is your pencil." // "This is your pencil." 출력
StringTokenizer 클래스 51 구분문자를기준으로문자열을분리하는클래스 예 ) 구분문자 (delimiter) : 문자열을구분할때사용되는문자 토큰 (token) : 구분문자로분리된문자열 구문문자 '&' int count = st.counttokens(); String token = st.nexttoken(); 토큰개수알아내기. count = 3 다음토큰얻어내기. st = "name=kitae"
StringTokenizer 로문자열분리사례 52 구문문자는 2 개 '&' 와 '=' int count = st.counttokens(); String token = st.nexttoken(); 토큰개수알아내기. count = 6 다음토큰얻어내기. st = "name"
예제 6-7 : StringTokenizer 를이용한문자열분리 53 "name=kitae&addr=seoul&age=21" 를 '&' 문자를기준으로분리하는코드를작성하라. import java.util.stringtokenizer; public class StringTokenizerEx { public static void main(string[] args) { String query = "name=kitae&addr=seoul&age=21"; StringTokenizer st = new StringTokenizer(query, "&"); int n = st.counttokens(); // 분리된토큰개수 System.out.println(" 토큰개수 = " + n); while(st.hasmoretokens()) { String token = st.nexttoken(); System.out.println(token); // 토큰얻기 // 토큰출력 토큰개수 = 3 name=kitae addr=seoul age=21
Math 클래스 54 기본산술연산메소드를제공하는클래스 모든메소드는 static 으로선언 클래스이름으로호출가능 Math.random() 메소드로난수발생 random() 은 0 보다크거나같고 1.0 보다작은실수난수발생 1 에서 100 까지의랜덤정수 10 개를발생시키는코드사례 for(int x=0; x<10; x++) { int n = (int)(math.random()*100 + 1); // 1~100 까지의랜덤정수발생 System.out.println(n); * java.util.random 클래스를이용하여난수발생가능 Random r = new Random(); int n = r.nextint(); // 음수, 양수, 0 포함, 자바의정수범위난수발생 int m = r.nextint(100); // 0에서 99 사이 (0과 99 포함 ) 의정수난수발생
예제 6-8 : Math 클래스활용 55 Math 클래스의메소드활용예를보인다. public class MathEx { public static void main(string[] args) { System.out.println(Math.abs(-3.14)); // 절댓값구하기 System.out.println(Math.sqrt(9.0)); // 9의제곱근 = 3 System.out.println(Math.exp(2)); // e 2 System.out.println(Math.round(3.14)); // 반올림 // [1, 45] 사이의정수형난수 5 개발생 System.out.print(" 이번주행운의번호는 "); for (int i=0; i<5; i++) System.out.print((int)(Math.random()*45 + 1) + " "); // 난수발생 3.14 3.0 7.38905609893065 3 이번주행운의번호는 14 44 21 36 17