표준 API(클래스라이브러리)의 기본 클래스 활용 JDK를 설치하면 수많은(약 3500개) 유용한 클래스들이 제공된다. C:\ProgramFiles\jdk1.x.x\jre\lib\rt.jar 파일에 압축된 형태로 제공 유사한 기능을 제공하는 클래스들은 같은 패키지(package) 단위로 제공 패키지 구성 java.lang : 프로그래밍의 가장 기본적인 클래스들을 제공 java.util : 프로그래밍의 유용한 유틸리티 클래스들을 제공 java.io : 프로그램 입출력과 관련된 클래스들을 제공 java.net : 네트워크 프로그램과 관련된 클래스들을 제공 java.awt : GUI(Window) 프로그램 개발을 위한 클래스들을 제공 java.sql : Database 연동을 위한 클래스들과 인터페이스들을 제공 기타 다양한 패키지들…
“문자열” 처리 관련 클래스 java.lang.String 클래스 java.lang.StringBuffer 클래스 java.util.StringTokenizer 클래스
스레드는 CPU를 추상화하여 만듦 java.lang.String 클래스 “문자열”을 추상화한 클래스로 “문자열” 데이터를 저장하고 “문자열”과 관련된 유용한 기능을 제공하는 클래스이다 다양한 인스턴스 메소드 / 클래스(static) 메소드 제공 특징 String 클래스 인스턴스는 한번 생성된 후에는 변경할 수 없다 char[] 포장 클래스 : char[] 을 이용한 문자열 저장 문자열 리터럴을 이용한 생성(묵시적 생성)시 생성자를 이용한 String 인스턴스 생성과 달리 새로운 인스턴스를 생성하지 않고 “StringPool”을 통해 공유 indexOf … String str = “Java”; // 코드는 아래의 코드와 같다 char[] data = {‘J’, ‘a’, ‘v’, ‘a’}; String str = new String(data); String str1 = “Java”; String str2 = “Java”; // str1과 str2는 동일한 String 인스턴스를 참조한다. 묵시적 생성
String 명시적 생성과 묵시적 생성 차이점 String str1 = new String("Java Programming"); String str2 = new String("Java Programming"); // 레퍼런스 비교 if(str1 == str2){ System.out.println("레퍼런스 같다."); }else{ System.out.println("레퍼런스 다르다."); } String str3 = "Java Programming"; String str4 = "Java Programming"; // 문자열 상수를 이용한 생성시 StringPool에서 // 검색 후 존재하지 않을 경우 새로 생성 if(str3 == str4){ System.out.println(str1 == str3); 문자열 내용은 똑같은데 따로 생성 str1 str2 묵시적 생성 무조건 생성하는것이 아니라 문자열이 저장되는 곳이 있는데 거기서 이 문자열을 검색을 해 그 다음 없으면 만듦 StringPool str3 str4 묵시적 생성 : 똑같은 값 쓸데없이 만들어서 공간 없애지 말고 참조해라 이거야! 메모리 낭비 줄여 주고, 훨씬 효율적
생성된 String 인스턴스는 변경할 수 없다 public static void main(String[] args) { String str = "Java Programming"; str = str + “최고예요”+ “뻥이예요…”; System.out.println(str); } Java Programing 최고예요 뻥이예요
java.lang.String 클래스의 주요 메서드 ★ equals 문자열과 문자열 비교 java.lang.String 클래스의 주요 메서드 int length() String 클래스의 문자열 길이를 반환한다. boolean equals(Object anObject) 두 String 클래스 객체의 내용이 같은지를 비교한다. boolean equalsIgnoreCase (String anotherString) 대소문자 구분 없이 문자열이 같은지를 비교한다. String substring(int beginIndex) beginIndex로 주어진 위치부터 문자열의 마지막까지의 문자열을 반환한다. String concat(String str) 인자로 주어진 문자열을 합친 새로운 String 객체를 반환한다(+ 연산자와 동일한 기능). String replace(char oldChar, char newChar) 기존의 oldChar로 표시된 모든 문자들을 newChar로 표시된 문자로 모두 바꾸어준다 다형성 인자 두 개 주면 범위 /하나면 처음부터 끝까지 + 연산자 대용 문자열과 문자열 붙이고 싶을 때(연결) char를 두 개 만듦 기존 문자를 새로운 문자로 대체시킴 앞에 문자를 뒤에 문자로 대체
java.lang.String 클래스의 주요 메서드 소문자로 변경 String toLowerCase() String 클래스 객체의 모든 문자를 소문자로 바꾼다 String toUpperCase() String 클래스 객체의 모든 문자를 대문자로 바꾼다. char charAt(int index) index로 지정된 곳의 문자값을 반환한다. int indexOf(int ch) 주어진 문자가 존재하는 위치를 알려준다. 존재하지 않으면 -1을 되돌린다. int lastIndexOf(int ch) 주어진 문자가 존재하는 마지막 위치를 알려준다. 존재하지 않으면 -1을 되돌린다. String trim( ) 문자열의 시작과 끝 사이에 있는 공백을 없앤다. static String valueOf (Object obj) 주어진 객체나 기본 데이터형을 문자열로 형변환 하여 반환한다. 대문자로 변경 공백 제거
java.lang.StringBuffer 클래스 StringBuffer sb = new StringBuffer(“Java”); sb.append(“최강의 언어”); // 자체 편집 System.out.println(sb); append concat과 비슷
java.lang.StringBuffer클래스의 주요 메서드 int length() 스트링버퍼 클래스 객체에 저장된 문자의 수를 반환한다. int capacity() 스트링버퍼 클래스 객체에 할당된 문자 배열의 크기를 반환한다. length() 메서드는 실제 저장된 문자의 수이고 이 메서드는 할당된 문자 배열의 크기라는 점이 차이이다. StringBuffer append(String str) str로 주어진 문자열을 스트링버퍼의 문자열에 추가한다. StringBuffer insert(int offset, String str) 정해진 위치에 str로 주어진 문자열을 추가한다. String toString() 스트링버퍼 클래스에 저장된 문자배열로 String 객체로 반환한다 StringBuffer delete(int start, int end) start~(end-1) 위치의 글자를 지운다. StringBuffer deleteCharAt (int index) 주어진 위치의 한문자를 지운다. StringBuffer replace(int start, int end, String str) start~(end-1) 위치의 글자를 지우고 대신 주어진 문자열을 끼워 넣는다. StringBuffer reverse( ) 문자열의 순서를 뒤집는다.
StringBuffer 클래스 주요 메서드 예 public static void main(String[] args) { StringBuffer sb = new StringBuffer(); sb.append("Java"); System.out.println(sb.toString()); sb.append("Programming"); sb.replace(0, 4, "C++"); System.out.println(sb); sb.reverse(); String str = sb.substring(11); System.out.println(str); }
java.util.StringTokenizer 클래스 하나의 “문자열”을 여러 개의 문자열로 분리하는데 사용할 수 있도록 제공되는 유틸리티 클래스이다. 나누는 단위가 되는 문자열을 토큰(Token)이라 한다. 생성자 StringTokenizer(String str) StringTokenizer(String str, String delimeters) str: 파싱 문자열, delimeters: “ ”(공백문자) str: 파싱 문자열, delimeters: 토큰분리자 주요 메서드 int countTokens() 문자열에 있는 토큰의 개수 반환 boolean hasMoreToken() 토큰이 있으면 true, 없으면 false 값을 반환 String nextToken() 다음 토큰 문자열을 반환 String nextToken(String delimiters) delimiters 토큰 분리자를 설정하고 다음 토큰 문자열 반환
StringTokenizer 주요 메소드 예제 public static void main(String[] args) { // 토큰 분리자: 공백문자열 StringTokenizer st1 = new StringTokenizer("김기정 박기정 최기정"); // 토큰 분리자: - StringTokenizer st2 = new StringTokenizer("2012-3-13", "-"); int tokenCount = st2.countTokens(); System.out.println("토큰 갯수: " + tokenCount); while(st2.hasMoreTokens()){//토큰 존재 시 System.out.println(st2.nextToken()); } // 토큰 분리자를 토큰에 포함해서 분리 StringTokenizer st3 = new StringTokenizer("2012-3-13", "-", true); while(st3.hasMoreTokens()){//토큰 존재 시 System.out.println(st3.nextToken());
래퍼(Wrapper : 포장) 클래스 데이터 타입과 관련된 주요 기능 제공 (인스턴스 변수가 됐든 클래스 메소드가 됐든) 8개의 기본 데이터를 객체로 포장하여 다양한 기능을 사용할 수 있도록 8개의 래퍼클래스를 제공한다. boolean java.lang.Boolean char java.lang.Character byte java.lang.Byte short java.lang.Short int java.lang.Integer long java.lang.Long float java.lang.Float double java.lang.Double 문자열 -> 정수 형변환
java.lang.Boolean 클래스 기본형 boolean의 값을 Boolean 객체로 포장한다. 생성자 생성자 Boolean(boolean value) Boolean(String str) value 인자를 이용한 Boolean 객체 생성 str 문자열(“true”/“false”)을 이용한 Boolean 객체 생성 주요 메서드 boolean booleanValue() Boolean 객체를 기본형 boolean으로 반환 boolean equals(Object obj) 두 Boolean 객체의 내용이 같은지를 비교 String toString() Boolean 객체를 String 객체로 반환 static Boolean valueOf (String str) String 객체를 Boolean 객체로 반환 객체로 만들어 주는 것 객체를 기본 값으로 만들어 주는 것 생성자 역할과 유사
java.lang.Charater 클래스 기본형 char의 값을 Character 객체로 포장한다. 생성자 생성자 Character( char value) 주요 메서드 public static boolean isDefined(char ch) ch가 유니코드이면 true, 아니면 false public static boolean isDigit(char ch) ch가 숫자면 true, 아니면 false public static boolean isLetter(char ch) ch가 문자면 true, 아니면 false public static boolean isLetterOrDigit(char ch) ch가 문자․숫자면 true, 아니면 false public static boolean isLowerCase(char ch) ch가 소문자면 true, 아니면 false public static boolean isSpace(char ch) ch가 공백이면 true, 아니면 false public static boolean isUpperCase(char ch) ch가 대문자면 true, 아니면 false public static char toLowerCase(char ch) ch를 소문자로 변형 public static char toUpperCase(char ch) ch를 대문자로 변형 숫자인지 문자인지 비교할 때 사용
java.lang.Integer 클래스 기본형 int의 값을 Integer 객체로 포장한다. 정수 관련 처리할 때 사용 생성자 Integer ( int value ) Integer ( String str ) 주요 메서드 public byte byteValue() 객체의 값을 byte 형으로 반환 public double doubleValue() 객체의 값을 double 형으로 반환 public float floatValue() 객체의 값을 float 형으로 반환 public int intValue() 객체의 값을 int 형으로 반환 public long longValue() 객체의 값을 long 형으로 반환 public short shortValue() 객체의 값을 short 형으로 반환 public static int parseInt (String str) str 로 지정된 문자열에 해당되는 int 값을 반환 public static int parseInt (String str, int radix) str 로 지정된 문자열에 해당되는 int 값을 radix 로 지정된 진법으로 변환하여 반환 public static Integer valueOf(String str) str 로 지정된 문자열에 해당되는 Integer 객체를 반환 public static String toBinaryString(int num) num 값을 2진수로 표현된 문자열 반환 public static String toHexString(int num) num 값을 16진수로 표현된 문자열 반환 public static String toOctalString(int num) num 값을 8진수로 표현된 문자열 반환 기본 데이터 타입 문자열 인스턴스 메소드 기본 데이터 타입 형변환 리턴타입이 자기 자신 String 2진 코드로 바꿔 줌
java.lang.Double 클래스 기본형 double의 값을 Double 객체로 포장한다. 숫자 x 생성자 생성자 Double ( double value ) Double ( String str ) str 은 double 형의 값과 같은 의미의 문자열(예: “1.23”) 주요 메서드 public byte byteValue() 객체의 값을 byte 형으로 반환 public double doubleValue() 객체의 값을 double 형으로 반환 public float floatValue() 객체의 값을 float 형으로 반환 public int intValue() 객체의 값을 int 형으로 반환 public long longValue() 객체의 값을 long 형으로 반환 public short shortValue() 객체의 값을 short 형으로 반환 public boolean isNaN() 객체의 값이 NaN(Not a Number) 이면 true, 아니면 false 반환 public static boolean isNaN(double num) num 의 값이 NaN 이면 true, 아니면 false 값 반환 public boolean isInfinite() 객체의 값이 NEGATIVE_INFINITY 또는 POSITIVE_INFINITY 이면 true, 아니면 false 값 반환 public static boolean isInfinite(double num) num 값이 NEGATIVE_INFINITY 또는 POSITIVE_INFINITY 이면 true, 아니면 false 값 반환 public static Double valueOf(String str) str 로 지정된 문자열에 해당되는 Double 객체를 반환 숫자 x
Character 주요 메소드 예제 public static void main(String[] args) { char[] data = {'A', 'a', '4',' ', '#'}; for (int i = 0; i < data.length; i++) { if(Character.isUpperCase(data[i])){ System.out.println(data[i] + "은 대문자이다."); }else if(Character.isLowerCase(data[i])){ System.out.println(data[i] + "은 소문자이다."); }else if(Character.isDigit(data[i])){ System.out.println(data[i] + "은 숫자이다."); }else if(Character.isSpaceChar(data[i])){ System.out.println(data[i] + "은 공백문자이다."); }
Integer 주요 메소드 예제 public static void main(String[] args) { Integer integer1 = new Integer(10); Integer integer2 = new Integer("10"); int i1 = integer1.intValue(); int i2 = integer2.intValue(); System.out.println("두수의 합: " + (i1+i2)); String str = "3578"; int i3 = Integer.parseInt(str); System.out.println("10진수를 2진수로:"+Integer.toBinaryString(i3)); System.out.println("10진수를 8진수로:"+Integer.toOctalString(i3)); System.out.println("10진수를 16진수로:"+Integer.toHexString(i3)); }
Double 주요 메소드 예제 public static void main(String[] args) { String str = "123.45"; Double d1 = new Double(str); double result = d1.doubleValue() / 5; System.out.println(result); System.out.println("NaN 체크 : " + Double.isNaN(result)); System.out.println("무한대 체크 : " + Double.isInfinite(result)); System.out.println("double 최대값 : " + Double.MAX_VALUE); System.out.println("double 최소값 : " + Double.MIN_VALUE); }
java.lang.Math 클래스 수학 연산과 관련된 상수(publis static final)와 클래스(static) 메서드를 제공하는 클래스 객체(인스턴스)를 생성하지 않아도 상수나 클래스메서드를 직접 호출하여 사용할 수 있다 예 : Math.PI 또는 Math.abs(-10); 상수 클래스 메소드
java.lang.Math클래스의 주요 메소드 상수 설명 public static final double PI 원주율(3.141592653589793) public static final double E 자연로그의 밑수 (2.718281828459045) 메서드 static int abs(int a) 절대값을 반환 데이터형별로 메소드 오버로딩됨 static double max(double a, double b) a와 b중 큰 값을 반환 static double min(double a, double b) a와 b중 작은 값을 반환 static double log(double a) a에 대한 로그 함수값을 반환함 static long round(double a) a의 반올림값을 반환함 static double sqrt(double a) a의 루트 연산을 반환함 static double pow(double a, double b) a를 b 만큼 몇승함 static double sin(double a) a값에 대한 사인 함수값을 반환 상수 처리 제곱근 구할 때
Math 주요 메소드 예제 public static void main(String[] args) { System.out.println("원주율: " + Math.PI); System.out.println("자연로그의 밑수: "+ Math.E); System.out.println("-20의 절대값: "+ Math.abs(-20)); System.out.println("-20.3의 절대값: "+ Math.abs(-20.3)); System.out.println("최대값: "+ Math.max(50, 30)); System.out.println("최소값: "+ Math.min(1.5, 3.3)); System.out.println("2의 3승 값: "+ Math.pow(2, 3)); System.out.println("69.6의 반올림: "+ Math.round(69.6)); System.out.println("69.3의 절상: "+ Math.ceil(69.3)); System.out.println("69.8의 절하: "+ Math.floor(69.8)); // 임의값 (0.0 <= random < 1.0) System.out.println(Math.random()); // 0 ~ 2 범위의 임의의 값 System.out.println((int)(Math.random()*3)); // 로또 번호(1~45범위의 6개) for (int i = 0; i < 6; i++) { System.out.print((int)(Math.random()*45) + 1 + "\t"); }
ava.util 패키지의 주요 클래스 java.util.Date java.util.Calendar java.util.Random 날짜
java.util.Date 클래스 날짜 및 시간과 관련된 정보를 제공하는 클래스 API Document 참조 요즘은 많이 사용 x 날짜 및 시간과 관련된 정보를 제공하는 클래스 Date 클래스는 정보의 부정확성 때문에 JDK1.1 이후 대부분의 메소드들이 Deprecated(폐기처분) 상태 – 사용 비권장 API Document 참조 정보의 부정확성
java.util.Calendar 클래스 날짜 및 시간과 관련된 정보를 제공하는 추상클래스이다 생성자를 제공하지 않으며 클래스(static)메소드인 getInstance() 메소드를 이용하여 현재 시스템 날짜로 설정된 인스턴스를 얻을 수 있다. new 사용 x Calendar today = Calendar.getInstance(); factory 메소드(시스템에 관련된 것들) 내가 직접 생성하는 것이 아니라 공장에 요청(요청하는 메소드가 바로 호출할 수 있게)
java.util.Calendar클래스의 주요 int형 상수 상수는 ALL 대문자!!! java.util.Calendar클래스의 주요 int형 상수 속성을 나타내는 것들 상수 설명 AM_PM set(int) , get(int)을 위한 상수로, HOUR 상수가 정오 전인지 후인지를 나타낸다 AM 자정부터 정오까지의 시간을 나타내는 AP_PM의 상수 값을 나타낸다 PM 정오부터 자정까지의 시간을 나타내는 AP_PM의 상수 값을 나타낸다 SECOND set(int) , get(int)을 위한 상수로 초를 나타낸다 MILLISECOND set(int) , get(int)을 위한 상수로 밀리세컨드(1/1000초) 나타낸다 MINUTE set(int) , get(int)을 위한 상수로 분을 나타낸다 HOUR_OF_DAY set(int) , get(int)을 위한 상수로 시각(24시간 기준)을 나타낸다 HOUR set(int) , get(int)을 위한 상수로 시각(12시간 기준)을 나타낸다 DATE set(int) , get(int)을 위한 상수로 달의 일을 나타낸다 DAY_OF_MONTH DAY_OF_WEEK set(int) , get(int)을 위한 상수로 주의 일을 나타낸다 SUNDAY 일요일을 나타내는 DAY_OF_WEEK의 상수 값을 나타낸다(월: MONDAY,…) DAY_OF_YEAR set(int) , get(int)을 위한 상수로 올해(365)의 몇일째인지를 나타낸다 WEEK_OF_MONTH set(int) , get(int)을 위한 상수로 현재 달의 몇번째 주인지를 나타낸다 WEEK_OF_YEAR set(int) , get(int)을 위한 상수로 올해의 몇번째 주인지를 나타낸다 MONTH set(int) , get(int)을 위한 상수로 달을 나타낸다 JANUARY 1월을 나타내는 MONTH의 상수 값을 나타낸다(2월:FEBRUARY, …) YEAR set(int) , get(int)을 위한 상수로 년을 나타낸다 범용 메소드 제공
java.util.Calendar클래스의 주요 메소드 get 메소드는 int 형만 가지고 옴 java.util.Calendar클래스의 주요 메소드 상수 설명 void add(int field, int ammount) 주어진 필드에 특정한 시간을 더하거나 뺀다 boolean after(Object when) 현재 객체가 when 이후이면 true 아니면 false 반환한다 boolean before(Object when) 현재 객체가 when 이전이면 true 아니면 false 반환한다 void clear() 현재 객체의 모든 속성의 값을 소거한다 int get(int field) 주어진 필드에 해당하는 값을 반환한다 static Calendar getInstance() 현재의 시간을 가진 Calendar 객체를 반환한다 Date getTime() Date 객체를 반환한다 long getTimeInMillies() 밀리 세컨드를 반환한다 void set(int year, int month, int date, int hour, int minute, int sencond) 년, 월, 일, 시, 분, 초의 값을 설정한다 void set(int field, int amount) 주어진 필드에 해당하는 값을 설정한다 밀리 세컨드: 영국 그리니치 천문대를 기준으로 한 시간(1000 = 1초) 정밀한 시간 계산할 때 사용 field에 들어갈 것이 년을 구할 거면 YEAR 이렇게 들어감 어떤 필드를 어떻게 설정한다
Calendar 주요 메소드 예제 public static void main(String[] args) { Calendar today = Calendar.getInstance(); System.out.println(“오늘의 날짜:” + today.get(Calendar.YEAR) + “년”); System.out.println((today.get(Calendar.MONTH)+1) + “월”); System.out.println(today.get(Calendar.DATE) + “일”); int hour = today.get(Calendar.HOUR); int minute = today.get(Calendar.MINUTE); int second = today.get(Calendar.SECOND); int ampm = today.get(Calendar.AM_PM); if(ampm == Calendar.AM){ System.out.println( “오전”); }else{ System.out.println( “오후”); }
java.util.Random 클래스 다양한 유형의 난수를 제공하는 클래스이다 생성자 설명 Random() 프로그램에서 사용하는 랜덤값 모두 제공 다양한 유형의 난수를 제공하는 클래스이다 생성자 설명 Random() 현재 시간을 초기값으로 객체 생성 Random(long seed) seed 값을 기초로 객체 생성 메서드 boolean nextBoolean() boolean 형의 난수 반환 void nextBytes(byte[] bytes) byte 형의 난수를 생성하여 배열에 저장 int nextInt() int 형의 난수 반환 int nextInt(int seed) 0부터 seed 사이의 int 형 난수 반환(0 <= random < seed) double nextDouble() double 형의 난수 반환 void setSeed(long newSeed) seed를 newSeed로 설정
Random 주요 메소드 예제 public static void main(String[] args) { Random random = new Random(); // 자바 데이터타입별 난수 발생 System.out.println(random.nextBoolean()); System.out.println(random.nextInt()); // -65536 ~ 65535 System.out.println(random.nextInt(100)); // 0~99 System.out.println(random.nextDouble()); // 로또 번호 생성 for (int i = 0; i < 6; i++) { System.out.println(random.nextInt(45)+1); }