String Method - 이가현
stringbuffer클래스
-string처럼 문자형 배열(char[])을 내부적으로 가지고 있다.
-그러나, string 과 달리 내용을 변경할 수 있다.
StringBuffer sb= new StringBuffer(”abc”)
sb.append(”123”) //abc뒤에 내용추가(내용변경가능)
StringBuffer sb= new StringBuffer(”abc”)
sb.append(”123”) //abc뒤에 내용추가(내용변경가능)
-배열은 길이 변경불가. 공간부족시 새로운 배열 생성해야함.
-해결방법
1.
for문을 사용하여 배열복사하기(새로운배열생성, 내용복사, 참조변경)
StringBuffer메서드
•
append()는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환.
•
sb.append(”123”).append(”zz”) 이렇게도 사용가능함.
•
sb.capacity() //배열길이
•
sb.delete(int start,int end)
•
sb.deleteCharAt(int index) //지정된 위치의 문자를 제거한다.
•
sb.insert( int pos, 넣을값) //지정된 자리에 추가로 값을 넣어주기
•
sb.replace(int start, int end, string str) //지정된 시작점부터끝지점에 다른 문자로 교체
•
sb.reverse() //문자 반대로 뒤집어주기
•
sb.setCharAt(int index,char ch) //지정된 위치의 문자에 다른 문자 넣기
•
sb.setLength(int newLength) //지정된 길이로 문자열 길이 변경(증가시 널문자로 채움)
•
sb.toString() // StringBuffer인스턴스의 문자열 String으로 반환
•
sb.substring(int start) //지정 자리부터 끝까지 추출
•
sb.substring(int start,int end) // 지정 자리부터 지정 끝자리까지 (from~to,to자리는 포함x)
StringBuffer의 비교
•
StringBuffer는 equals()가 오버라이딩되어있지않음.(주소비교)
•
StringBuffer을 string으로 변환 후에 equals로 비교
String s =sb.toString(); //sb를 String을 변환
String s2 =sb2.toString();
System.out.println(s.equals(s2)); //true
StringBuilder
•
StringBuildr는 동기화x
•
StringBuffer는 동기화 되어서 멀티 스레드에 안전(thread-safe)
•
멀티 스레드 프로그램이 아닌 경우, 동기화 불필요한 성능저하 때문에 StringBuilder추천
싱글 스레드 : 한번에 1개 작업
멀티 스레드 : 한번에 n개 작업
Calendar, Math Method - 조국현
math 클래스
수학계산에 유용한 메소드로 구성되어 있으며 java.lang 패키지에 포함되어 있는 클래스로 import 문 없이 사용할 수 있다.
math 클래스의 필드
2가지의 상수만 정의되어있다.
•
Math.PI : 원주율
•
Math.E : 자연로그의 밑
public static final double E = 2.71828....;
public static final double PI = 3.141592.....; //(...는 생략함)
Java
복사
자주 쓰이는 메소드들 (Math 클래스)
•
abs() : 전달된 값의 절댓값을 반환한다.
•
ceil() : 전달받은 값을 올림 후 반환한다.
•
floor() : 전달받은 값을 버림 후 반환한다.
•
max() : 두 값 중 큰 수를 반환한다.
•
min() : 두 값중 작은 수를 반환한다.
•
random() : 0.0~1.0 범위의 임의 double 값을 반환한다. (1.0 포함 X)
•
round() : 소수 첫 째자리에서 반올림한 long 타입 정수값을 반환한다.
•
sin(), cos(), tan() : double 타입으로 사인, 코사인, 탄젠트값을 반환한다.
•
pow(a,b) : a^b를 반환한다.
•
sqrt() : 전달받은 값의 제곱근을 double형으로 반환한다.
System.out.println(Math.abs(-10)); //10 출력
System.out.println(Math.ceil(10.1)); //11.0 출력
System.out.println(Math.floor(10.1)); //10.0 출력
System.out.println(Math.max(1,3)); //3 출력
System.out.println(Math.min(1,3)); //1 출력
System.out.println((int)Math.random()*100)); // 0~99가 출력된다. 100이 출력되기 위해서는
System.out.println((int)Math.random()*100)+1);//이와 같이 1을 더해준다.
System.out.println(Math.round(10.5)); //11이 출력된다.
System.out.println(Math.pow(2,3)); //8이 출력된다.
System.out.println(Math.sqrt(100)); //10이 출력된다.
Java
복사
date 클래스
•
날짜, 시간에 관해 쉽게 처리 할 수 있게 하기 위해 제공되는 추상클래스(사용할 달력체계가 다를 수 있어서).
•
추상클래스 → 객체를 직접 생성할 수 없다. → 메서드를 통해서 구현된 클래스의 인스턴스를 얻는다.
Calendar cal = new Calendar(); //Error. 인스턴스를 생성할 수 없다.
Calendar cal = Calendar.getInstance();
Java
복사
예제코드
Calendar today = Calendar.getInstance();
System.out.println("이 해의 년도 : " + today.get(Calendar.YEAR));
System.out.println("월(0~11, 0:1월): " + today.get(Calendar.MONTH));
System.out.println("이 해의 몇 째 주: "
+ today.get(Calendar.WEEK_OF_YEAR));
System.out.println("이 달의 몇 째 주: "
+ today.get(Calendar.WEEK_OF_MONTH));
// DATE와 DAY_OF_MONTH는 같다.
System.out.println("이 달의 몇 일: " + today.get(Calendar.DATE));
System.out.println("이 달의 몇 일: " + today.get(Calendar.DAY_OF_MONTH));
System.out.println("이 해의 몇 일: " + today.get(Calendar.DAY_OF_YEAR));
System.out.println("요일(1~7, 1:일요일): "
+ today.get(Calendar.DAY_OF_WEEK)); // 1:일요일, 2:월요일, ... 7:토요일
System.out.println("이 달의 몇 째 요일: "
+ today.get(Calendar.DAY_OF_WEEK_IN_MONTH));
System.out.println("오전_오후(0:오전, 1:오후): "
+ today.get(Calendar.AM_PM));
System.out.println("시간(0~11): " + today.get(Calendar.HOUR));
System.out.println("시간(0~23): " + today.get(Calendar.HOUR_OF_DAY));
System.out.println("분(0~59): " + today.get(Calendar.MINUTE));
System.out.println("초(0~59): " + today.get(Calendar.SECOND));
System.out.println("1000분의 1초(0~999): "
+ today.get(Calendar.MILLISECOND));
// 천분의 1초를 시간으로 표시하기 위해 3600000으로 나누었다.(1시간 = 60 * 60초)
System.out.println("TimeZone(-12~+12): "
+ (today.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
System.out.println("이 달의 마지막 날: "
+ today.getActualMaximum(Calendar.DATE) ); // 이 달의 마지막 일을 찾는다.
Java
복사
•
getInstance()를 통해 받은 인스턴스가 현 시스템의 날짜, 시간 정보를 담고 있음.
•
1~12월의 달이 0~11로 세어지는 것을 주의해야함.
자주 쓰이는 메소드(Calendar 클래스)
•
void add(int field, int amount) : Calendar 필드에서 특정 시간만큼 더하거나 뺌
•
boolean after(Object when) : 현 Calendar 인스턴스가 전달된 객체가 나타내는 시간보다 나중인지확인
•
int get(int field) : Calendar 필드에 저장된 값을 반환
•
void set(int field, int value) : Calendar 필드를 특정값으로 설정
Boxing, Unboxing - 임학준
래퍼클래스
•
변수의 기본 자료형(Primitive Type)을 객체로 다뤄야할때 사용한다
•
8개의 기본 타입에 대하여 모든 래퍼 클래스를 제공하고 있다
•
파이썬, 자바스크립트는 Primitive Type이 없고 모두 참조형을 사용한다
Integer n1 = new Integer(10);
Integer n2 = new Integer("10");
Integer n3 = Integer.valueOf(10);
//Integer은 int타입의 래퍼클래스이며 n1 , n2 , n3 은 모두 객체로 취급된다
Java
복사
boxing unboxing
•
기본 타입 데이터를 래퍼클래스를 바꾸는것을 박싱(boxing)이라고 한다
•
래퍼클래스에서 기본타입으로 변환하는것을 언박싱(unboxing)이라고 한다
•
기본형과 참조형(객체)의 연산은 원래 불가능했으나 JDK 1.5부터 컴파일러가 박싱과 언박싱이 필요한 상황에 따라 자동(오토박싱)으로 처리를 해주어 가능하게 되었다
Integer num1 = 20; //오토박싱(boxing)
int num2 = num1; //언박싱(unboxing)
Java
복사
•
실제 오토 박싱 연산은 추가 연산으로 속도를 저하시키므로 굳이 사용하지는 않는다
Integer n1 = Integer.valueOf(5);
Integer n2 = Integer.valueOf("1234"); //문자열 1234를 숫자로 바꾸고 싶을때
Integer num1 = 5; // int num1 = 5;
Integer num2 = 5; // int num2 = 5;
int n3 = n1 + n2;
Integer num3 = num1 + num2;
System.out.println(n3); //출력결과 : 1239
System.out.println(num3); //출력결과 : 10
Java
복사
Integer 클래스 메소드
Integer n1 = Integer.valueOf(5);
int n2 = Integer.valueOf("1234");
System.out.println("큰수" + Integer.max(n1,n2)); //max,min,sum 모두 static
System.out.println("작은 수" + Integer.min(n1,n2));
System.out.println("합 " + Integer.sum(n1,n2));
System.out.println("2진 표현"+ Integer.toBinaryString(12));
System.out.println("8진 표현 "+Integer.toOctalString(12));
System.out.println("16진 표현"+Integer.toHexString(12));
System.out.println("정수의 최대값 "+Integer.MAX_VALUE);
System.out.println("정수의 최소값"+Integer.MIN_VALUE);
System.out.println("LONG의 최대값 "+Long.MAX_VALUE); //long의 래퍼클래스
System.out.println("LONG 최소값"+Long.MIN_VALUE);//9천경
//출력결과
큰수1234
작은 수5
합 1239
2진 표현1100
8진 표현 14
16진 표현c
정수의 최대값 2147483647
정수의 최소값-2147483648
LONG의 최대값 9223372036854775807
LONG 최소값-9223372036854775808
Java
복사
BigInteger 클래스 메소드
•
int,long는 표현 할 수 있는 값이 정해져있다. 그래서 long형 보다 큰 값을 표현할때 사용한다
•
number 클래스를 상속한다
BigInteger big1 = new BigInteger("1000000000000000");//9천경을 초과
BigInteger big2 = new BigInteger("-999999999999999");
BigInteger result = big1.add(big2);
//big1 + big2를 사용할 경우 데이터타입이 넘어서 연산이 되지않는다
System.out.println("결과 " + result);
result = big1.multiply(big2); 출력결과 1
System.out.println("결과"+result); 출력결과 -999999999999999000000000000000
Java
복사
Generic Class - 김기헌
제네릭 (Generic):
데이터의 타입(Data type)을 일반화 하는 것
제네릭 기법의 장점
•
클래스나 메소드 내부에서 사용되는 객체의 타입 안정성 ↑
•
반환값에 대한 형변환 및 타입 검사에 들어가는 번거로움 ↓
ArrayList list = new ArrayList(); //제네릭을 사용하지 않을경우
list.add("test");
String temp = (String) list.get(0); //타입변환이 필요함
ArrayList<String> list2 = new ArrayList(); //제네릭을 사용할 경우
list2.add("test");
temp = list2.get(0); //타입변환이 필요없음
Java
복사
제네릭 클래스(Generic Class)
•
제네릭 클래스는 정의할 때, 구체적인 타입을 적지 않고 변수 형태로 적는다
•
클래스를 선언하여 객체를 생성할 때, 구체적인 타입을 기재한다.
//기존의 방식
public class Box {
private Object data;
public void set(Object data){
this.data = data;
}
public Object get(Object data){
return data;
}
}
Java
복사
//제네릭 기법
public class GenericBox<T> {
private T data;
public void set(T data) {
this.data = data;
}
public T get() {
return data;
}
}
Java
복사
위와 같이 클래스를 설계할 때 구체적인 타입을 명시하지 않고 타입 파라미터로 넣어두었다가, 실제 설계한 클래스가 사용되어질 때,
GenericBox<String> gb1 = new GenericBOX<>();
GenericBox<Integer> gb2 = new GenericBOX<>();
Java
복사
이런식으로 구체적인 타입을 지정하며 사용한다.
타임 파라미터는 정해진 규칙은 없지만 일반적으로 대문자 알파벳 한글자로 표현한다.
Generic Class - 최아영
제네릭
•
다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일 시의 타입을 체크 해주는 기능이다.
•
타입 인자는 참조형이다.
•
타입 안정성을 제공한다.
•
타입체크와 형변환을 생략할 수 있으므로 코드가 간결해진다.
•
쉼표(,)로 구분하여 여러 개를 선언할 수 있다.
제네릭 이전 코드의 단점
•
Object 타입으로 객체를 받아서 다형성을 이용해 형변환해야 하는 번거로움이 있었다.
•
프로그래머의 실수가 컴파일 과정에서 발견되지 않을 수 있다.
제테릭 클래스 선언 및 생성
class Box<T> {
private T data;
public void set(T data) {
this.data = data;
}
public T get() {
return data;
}
}
public class GTest {
public static void main(String[] args) {
Box<String> Box = new Box<>();
}
}
Java
복사
•
객체 생성할 때는 타입 변수 자리에 사용할 실제 타입을 명시해야 한다.
•
객체 생성 시 타입을 추정할 수 있는 경우에는 생략가능하다.
자주 사용하는 타입인자
타입 인자 | 설명 |
<T> | Type |
<E> | Element |
<K> | Key |
<N> | Number |
<V> | Value |
<R> | Rsult |
제네릭 클래스 예제
class DBox<T,E>{
private T t;
private E e;
public void set(T t, E e) {
this.t = t;
this.e = e;
}
public String toString() {
return t + "&" + e;
}
}
public class GenericExample {
public static void main(String[] args) {
DBox<String ,Integer> box = new DBox<>();
box.set("Apple", 25);
System.out.println(box);
}
}
Java
복사
Generic Method - 김상호
제네릭이란?
•
클래스, 메소드에서 사용할 데이터 타입을 나중에 확정하는 기법.
제네릭을 사용하는 이유
•
타입 안정성을 제공
•
타입체크와 형변환을 생략할 수 있으므로 코드가 간결해짐.
제네릭 메소드란?
•
클래스의 전역이 아닌 메소드의 선언부에 적은 제네릭으로 리턴 타입, 파라미터의 타입이 정해지는 메소드
제네릭 메소드 문법
public<타입_파라미터>리턴타입 메소드명(매개변수,...){...}
public<T>Box<T> boxing(T t) {...}
Plain Text
복사
제네릭 메소드를 사용하는 이유
•
클래스에서와 달리 호출시에 매개 타입을 지정하기 때문에 static을 사용가능하다.
•
타입캐스팅 에러의 경우를 제외시킬 수 있기 때문에 훨씬 안전하게 사용할 수 있어서
토막상식
•
static 변수가 제네릭을 사용할 수 없는 이유는 제네릭 클래스가 인스턴스가 되기 전에 static은 메모리에 올라가는데 이때, 리턴타입의 타입인 T가 결정되지 않기 때문에 사용할 수 없다.
•
제네릭 메소드를 사용하면 클래스의 T와 메소드의 T는 같은 문자를 사용해도 다른 문자라는 것을 기억하기