Object Class - 최아영
Object 클래스
•
java.lang 패키지에 들어있다.
•
모든 클래스의 조상이다.
object 메소드
public boolean equals(Object obj) | obj가 이 객체와 같은지를 검사 |
public String toString() | 객체의 문자열 표현을 반환 |
protected Object clone() | 객체 자신의 복사본을 생성하여 반환 |
public int hashCode() | 객체에 대한 해쉬 코드를 반환 |
protected void finalize() | 가비지 콜렉터에 의하여 호출 |
public final Class getClass() | 객체의 클래스 정보를 반환 |
Equalse() 메소드
•
equals()는 두 대상의 데이터 값을 비교한다.
•
==는 두 객체의 주소값을 비교한다.
Equals() 예제
class INum {
private int num;
public INum(int num) {
this.num = num;
}
public boolean equals (Object obj) {
if (obj instanceof INum) {
INum n1 = (INum) obj;
if (this.num == n1.num) {
return true;
}
}
return false;
}
}
public class ObjectTest {
public static void main(String[] args) {
INum num1 = new INum(10);
INum num2 = new INum(12);
INum num3 = new INum(10);
if(num1.equals(num2))
System.out.println("num1, num2 내용 동일하다.");
else
System.out.println("num1, num2 내용 다르다.");
if(num1.equals(num3))
System.out.println("num1, num3 내용 동일하다.");
else
System.out.println("num1, num3 내용 다르다.");
}
}
Java
복사
ToString 메소드
•
Object 클래스의 toString() 메소드는 객체의 문자 정보를 반환한다.
•
일반적으로 의미 있는 문자 정보가 나오도록 재정의 한다.
•
Date 클래스는 현재 시스템의 날짜와 시간 정보를 반환한다.
•
String 클래스는 저장하고 있는 문자열을 리턴한다.
ToString() 예제
class Student {
private String name;
private String gender;
public Student(String name, String gender) {
this.name = name;
this.gender = gender;
}
public String toString() {
return "이름은 " + this.name + "이고 성별은 " + gender + "입니다.";
}
}
public class ObjectTest {
public static void main(String[] args) {
Student s = new Student("홍길동", "남자");
System.out.println(s);
}
}
Java
복사
String Class - 임학준
String class
•
문자열 생성시 문자열리터럴을 지정하는방법과 새로운객체(인스턴스)를 생성하는 방법이 있다
String s1 = "java";//상수(리터럴)
String s2 = "java";
String s3 = new String("java");
String s4 = new String("java");
if(s1 == s2)
System.out.println("같습니다");
else
System.out.println("다릅니다");
if(s3==s4)
System.out.println("같습니다");
else
System.out.println("다릅니다");
/*출력결과 같습니다 //문자열이 같을경우 이미 존재하는 리터럴을 재사용
다릅니다 */
Java
복사
◦
s1과 s2는 문자열을 같은 메소드 에어리어 안에 저장한다.
◦
s3과 s4는 각각의 객체를 생성한다 (객체의 주소값이 다르다)
trim()
•
데이터베이스에 저장할때 공백을 없앤 결과는 반환한다(문자열 중간은 제외)
String trimStr = " i love you ";
System.out.println(trimStr);
System.out.println(trimStr.trim());
System.out.println(trimStr.length());
System.out.println(trimStr.trim().length());
// i love you //trim()함수 사용시 i love you 양 옆의 공백 제거 후 출력
//i love you
//12 // 양 옆의 공백을 포함한 길이를 출력
//10
Java
복사
indexOf
•
주어진 문자,문자열이 존재하는지 확인하여 그 위치를 알려준다
•
찾지 못할때는 -1을 데이터에 반환한다
public static void main(String[] args) {
String str3 = "the cat is on the table";
int index = str3.indexOf("table");
System.out.println(index);
System.out.println(str3.length());
//table를 찾아서 첫번째 인덱스(몇번째 배열에 있는가를 출력 = 18 (18번째라는뜻)
//매칭되는값이 없으면 -1을 출력
//18
//23
Java
복사
split
•
문자열을특정 문자 또는 정규표현식을 기준으로 나누어 배열로 리턴한다
String[] tokens ="100,200,300".split(","); //","를 기준으로 배열로 리턴
for (String token : tokens) {//for each문
System.out.println(token);
}
//100
//200
//300
Java
복사
valueOf
•
지정한값을 문자열(String타입)으로 변환한다
String str1 = String.valueOf(100);//"100
String str2 = String.valueOf(10.0);//10.0 .double로 문자열 10.0으로 만들
String str3 = String.valueOf(false);//boolean 값
String str4 = "500";
int num2 = Integer.parseInt(str4);//문자열을 int로 형변환
// 10
// 10.3
// false
// 500 //모두 문자열 타입으로 출력된다
Java
복사
String vs String Buffer vs String Builder - 김기헌
Java언어에서 주로 사용되는 문자열 클래스로 String, StringBuffer, StringBuilder가 있다.
String vs StringBuffer, String Builder
String 클래스는 불변(Immutable)한 것이 가장 큰 특징
String 객체는 한 번 생성되었을 때, 할당된 메모리 공간이 변하지 않는다.
연산을 통해 기존에 생성된 객체에 다른 문자열을 붙였을 때, 기존 문자열에 새로운 문자열을 붙이는 것이 아니라 새로운 String 객체를 생성하여 연결된 문자열을 저장하고, 그 객체를 참조하도록 한다.
String str = "hello"
str = str + "world";
Java
복사
즉, 위의 코드에서 참조변수 str이 가리키는 곳에 저장된 “hello”에 “world”가 추가되는 것이 아니라 “helloworld”라는 값이 있는 새로운 메모리 영역을 가리키게 변경된다.
그리고 “hello”값이 할당되어 있던 메모리는 GC에 의해 사라지게 된다.
String 클래스는 불변하기 때문에, 문자열을 수정하는 시점에 새로운 String 인스턴스가 생성되는 것이다.
이러한 이유로 String은 문자열 연산이 많은 경우, 성능이 떨어진다.
StringBuffer, StringBuilder
String이 Immutable 했다면, StringBuffer와 StringBuilder는 Mutable하다.
문자열을 연산 등으로 수정할 때, 동일 객체내에서 문자열을 변경한다. 객체의 공간이 부족해지면 기존의 버퍼 크기를 늘리며 동작한다.
String Buffer sb = new StringBuffer("hello");
sb.append("world");
Java
복사
즉, 위의 코드에서는 String과 다르게 sb가 가르키는 “hello”에 “world”가 추가되어 “helloworld”가 된다.
문자열의 추가, 수정, 삭제 등 연산이 자주 발생하는 경우에는 String 클래스가 아닌 StrungBuffer, StringBuilder를 사용하는 것이 좋다.
StringBuffer vs StringBuilder
그렇다면 StringBuffer와 StringBuilder의 차이점은 무엇일까?
StringBuffer는 각 메소드별로 Synchronized Keyword가 존재하여 동기화를 지원하기 때문에 멀티쓰레드 환경에서도 안정성(thread - safe)을 가지고 있다.
반면, StringBuilder는 동기화를 지원하지 않는다. 다만 동기화를 고려하지 않기 때문에 단일 스레드 환경에서의 성능은 StringBuffer보다 뛰어나다.
그렇기 때문에 멀티 스레드 환경에서는 StringBuffer를, 단일 스레드 환경에서는 StringBuilder를 사용하는 것이 좋다.
Stack - 조국현
정의
LIFO(Last In First Out), 꺼내려면 넣은 순서의 반대로 꺼내야 하는 자료구조.
•
full : 스택이 가득차있으면 true, 가득차 있는게 아니면 false 반환