//////
Search
📓

9/30 String, Calendar, Math Method, Boxing and Unboxing, Generic

생성일
2022/09/30 07:10
태그

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 작은 수51239 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는 같은 문자를 사용해도 다른 문자라는 것을 기억하기