날아라쩡글이의 블로그입니다.

object 클래스 본문

java (학원 전) story/java의 정석 기초편

object 클래스

날아라쩡글이 2021. 7. 13. 20:05
반응형
Object 클래스의 메서드: 항상오버라이딩을 해줘야함 설    명
protect object clone()->public으로 오버라이딩 필요 객체의 복사본을 반환(clone)
public boolean equals(object obj)  같은 객체인지 비교
protect void finalize()->public으로 오버라이딩 필요 객체가 소멸시 메모리문제가 되지않도록, 생성자로부터 객체 초기화 ->많이 사용x
public Class getClass() 객체자신의  class정보를 초기화함
public int hashCode() 해시코드를 반환함
public String toString() 문자열로 반환함

object 클래스의 메서드

public boolean equals(object obj){ return (this==object)} 로 오버라이딩한 후 obj을 형변환 해주어야한다. 이후 public int hashCode()로 같은 해쉬코드로 반환해주어야함. 

hashcode의 경우 해시함수(hash function)을 구현한 것으로 다량의 데이터를 저장하고 검색하는데 유용하다.

object클래스에 정의된 hashcode의 메서드는 해시코드를 만들어서 반환한다. 객체의 주소를 int로 변환하여 반환한다. 그렇기 때문에 equals메서드 뿐만 아닌 hashcode의 값도 오버라이딩을 해주어야한다. 

System.identityhashcode를 보면 주소값은 다르지만 equals의 오버라이딩으로 해쉬코드의 값은 동일해진것을 확인할 수 있다. 

그러나 64bit의 값을 적용할 경우 주소값이 겹칠 수 있다는 점을 참고하자! 

 

toString()

-객체를 문자열로 반환하는 메서드이다. 

public String toString(){ return getClass().getName()+"@"+Integer.toHexString(hashCode());}

public String toString(){ return 설계도객체().클래스이름().at위치.16진수.(객체주소)

오버라이딩을 하지 않는다면 16진수의 값이 나올 수 있기때문에 

return "값이름:"+getClass()"+"값이름"+getName();으로 오버라이딩을 해주면 된다. 

오버라이딩을 하였을 경우
오버라이딩을 하지않을 경우 

[String class]

-문자열을 다루는 class로 char[]의 문자배열데이터를 + 문자열 메서드와 결합하여야한다. 

-변경이 불가능한 immutable의 클래스로 string 인스턴스가 갖고있는 문자열은 읽어 올 수만 있고, 내용을 변경할 수는 없다. 

- 그렇기 때문에 "ab"라는 새로운 문자열을 넣으면 다른 별도의 공간에 입력이 되어 + 덧셈연산자를 사용하여 문자열을 결합하는 것은 메모리공간을 차지하므로 성능이 떨어져 결합횟수를 줄이는 것이 좋다. 

-이때 stringbuffer와 stringbuilder를 사용하여 메모리 할당량을 줄일 수 있다. 

 

[string 문자열의 비교 ]

1. string str1= "abc"; 문자열 리터럴을 저장하는 방법과 

2. string str2= new string("abc");  새로운 string인스턴스를 new연산자로 생성하는 방법이 있다. 

1번의 경우 하나의 문자를 공유하는 방법이며,  

2번의 경우 항상 새로운 문자열로 만들어 주소가 다르다는 것이다. 둘다 내용변경은 불가하다. 

문자열의 주소비교를 확인하기 위해서는 == 등호표시가 아닌 equals로 사용한다. ==등호 표시로 확인할 경우 주소값이 나온다. 

string의 같은 문자열인지 주소값이 동일한지 확인하는 코드 

[string의 리터럴]

string의 리터럴은 자동으로 생성이된다. constant pool이라는 상수에 저장을 한다. 자동으로 String class = new s();을 생성한다. 

[빈문자열 ] = " " 

메모리를 직접 다루지 않지만 중요하다. 

string 값의 경우 null ; 을 입력하는 것보다는 " "  빈칸으로 입력하는 것이 더 좋다. 

char 값의 경우 '\u0000';값인 대신에 공백으로 초기화 해버리는 것이 더 좋은 코드이며 간단하고 쉽다. 

숫자를 문자열로 변환하고 싶을 경우에도 ""+5= "5" 이렇게 반환가능하다. 

[string 클래스의 생성자와 메서드]

자바의 경우 시작<= x <끝 처럼 끝이 포함이 안되는 경우가 대부분이다. 그리고 시작은 0부터 숫자를 센다

메서드 설명 예제  결과값
String(String s) 생성자  String s=new String("Hello"); s = " Hello"
String(char[] value) 주어진 문자를 문자열로 출력 char[]c={H,E,L,L,O};
String s = new string(c);
s = "Hello"
String(StringBuffer buf) 내용이 변경가능한 문자열 StringBuffer sb =
new StringBuffer("Hello");
String s = new String(sb); 
s="Hello"
char charAt(int index) 지정된 위치부터 있는 문자를문자열로 알려준다  String s = "Hello";
String n = "0123456";
char c = s.charAt(1);
char c1 = s.charAt(2);
c = 'e'
c1 = '2'
int compareTo(String str) 문자열과 사전순서로 비교 한다. 같으면 0을, 사전순서로 이전이면 음수를 이후면 양수를 반환한다.  int i =
"aaa".compareTo("aaa");
int i1 = 
"bbb".compareTo("aaa");
int 2 = 
"aaa".compareTo("bbb");
i = 0; 같은값
i1 = 1; 구분값이 적으면
i2 = -1; 구분값이 크면
String concat(String str) 문자열뒤에 덧붙인다. String s = "Hello";
String s2 =
s.concat(" World");
s2 ="Hello World"
boolean contains
(Charsequence s)
(interface charsequence를 두고 charsequence를 함께 쓰는 녀석들과 함께 쓰는지 확인하는 부분 repairable을 두는 것)
지정된 문자열이 포함되어 잇는지 검사한다. 
interface charsequence
-charBuffer
-segment
-String 
-StringBuffer
- StringBuilder
String s = "abcdefg";
boolean b 
s.contains("bc")
bc가 charsequence에 포함인가? - boolean값의 출력
b = true
boolean endsWith
(String suffix)
지정된 문자열(suffix)로 끝나는지 검사한다. 
boolean equls(Object obj) 매개변수를 받은 문자열과 string의 인스턴스 의 문자열을 비교함 String s = "Hello"
boolean b=
s.equals ("Hello");
boolean b1 =
s.equals("hello");
b = true
b1 = false
boolean equalsIgnoreCase
(String str)
문자열을 대소문자 구분없이 비교한다. 
int indexOf(int ch) 주어진 문자열에 존재하는지 확인하여 위치를 알려줌, 찾지못하면 -1, index값은 0으로 반환한다. 
int indexOf(int ch, int pos) 문자 검색후 시작위치를 반환한다.  못 찾으면 -1을 반환한다.
index = 위치
String s = "Hello";
ini idx =int s.indexOf('e',0);
int idx1 = 
int s.indexOf('e',2);
3번째에 있는 e값 
idx = 1
idx1 = -1
못 찾아서 -1을 반환함

int indexOf(String str) 주어진 문자열이 존재하는 지 확인하여 위치를 알려줌 
index = 위치
String s ="ABCDEF"
int idx = s.indexOf("CD");
idx = 2
0부터 숫자세서 3이다. 
String intern() 문자열을 상수풀에 등록, 상수풀에 동일값이 있는지 체크하는 것 String s = new String("abc");
String s1= new String("abc");
boolean b = (s==s2);
boolean b1 = s.equals(s2);
boolean b2 =
(s.intern()==s2.intern());
b = false
b1 = true
b2 = true
int lastIndexOf(int ch) 문자의 오른쪽 끝에서부터 찾아서 위치를 알려준다. 못찾으면 -1을 반환한다.
문자는 고정한다. 
String s = "java.lang.Object";
int idx1 = s.lastIndexOf('.');
int idx 2 = s.indexOf('.');
indexOf는 앞에서
index1 = 9
index2 = 4
int lastIndexIf(String str)
(문자열)
문자열의 오른쪽 끝에서부터 찾아서 위치를 알려준다. 못찾으면 -1을 반환한다.
문자열은 고정한다.
String s=  "java.lang.java";
int idx1=
s.lastIndexOf("java");
int  idx2 = 
s.indexOf("java");
idx1 = 10
idx2 = 0
 int length() 문자열의 길이를 알려준다. String s = "Hello";
int length = s.length();
length = 5
String replace(char old, char nw) 문자열중 old문자를 nw으로 바꿔 출력한다. String s = "Hello";
String s1 = s.replace('H', 'C');
s1 = "Cello"
String repalce (charSequence old, charSequence nw) 문자열 중의 문자열 (old)를 새로운 문자열 (nw) 으로 바꿔 출력한다.  String s = "Hello";
String s1 = s.replace("ll","cc");
s1 = "Hecco"
반응형

'java (학원 전) story > java의 정석 기초편' 카테고리의 다른 글

java 기초 (종류/크기, 지시자)  (0) 2021.07.19
자바의 역사  (0) 2021.07.07
Comments