object, 마크업 메소드, String 메소드들, Integer.parseInt, Double.parseDouble

2019. 3. 14. 19:58JAVA

----------------------------------object---------------------------------------------------------

boolean equals(Object other)

- 전달받은 다른 객체와 동일한 객체인지 여부를 제공하는 메소드

* 두 객체가 논리적으로 동일한지 여부를 판단하도록 하기위해

   hashCode()와 wquals()를 재정의해야 한다.

* 이클립스가 제공하는 기능을 사용

int hashCode()

- 객체마다 부여된 일련번호(정수값)을 제공하는 메소드

String toString()

- 객체에 대한 간단한 정보("클래스이름@해쉬코드")를 문자열로 제공하는 메소드

- 하위 클래스에서는 객체의 필드값을 문자열로 이어붙여서 저공하도록

   재정의할 수 있다.

- System.out.println(참조변수)를 실행하면 참조변수가 참조하는객체의 toString()

  실행경과가 화면에 출력한다.

  * System.out.println(참조변수)는 System.out.println(참조변수.toString()) 이다.


-------------------------clone-----------------------


clone()

얕은 복제(thin clone())

- 얕은 복제는 복제될 클래스만 복제가 된다 그래서 만약 복제되는 클래스가 

  참조하는 클래스가 있는경우 참조는 같이 하게된다.


깊은 복제(deep clone())

- 깊은 복제는 복제될 클래스 뿐만아니라 참조되어있는 객체의 모든 클래스를 복제하게된다.


------------------------------------------Markup interface---------------------------------------------------------


추상 메소드가 없는 메소드를 Markup interface라고 한다.(추상화 메소드가 없는 클래스),  마크업 인터페이스를 implement 해야 쓰고 읽기가 가능하다.

예) Cloneable(복제 가능한 인터페이스), Serializable(네트워크 통해 읽고 쓰기하는데 사용함, 많이많이 사용 나중에 거의 implement 로 상속해야함)  등



이클립스---- 

ctrl + 메소드 = 클릭하면 만들어진곳 간다

메소드 클릭후 -> 마우스 오른쪽 클릭 -> Open Call Hierarchy = 이 메소드를 사용중인 클래스를 보여준다.




-----------------------------------------String----------------------------------------------------------------------


다른 객체는 보통 AAA aa = new AAA(); 이렇게 작성해야하지만 유일하게 String aa = "hello"; 가 가능하다.


- String은 불변 객체이다. 그래서 원본은 바뀌지않고 값만 바꿔서 준다.

  str a = "abc"

         = a+"xyz" = "abc"+"xyz" = "abcxyz"인데 값이 바뀌는게 아니라 abcxyz라는 값으로 참조(번지값)가 달라진 새 String으로 만들어진것이다. 



다만, String aa = new String("hello"); 으로 만들면 새로운 hello값인 객체가 만들어지는것이고

String aa1 = "hello";  String aa2 = "hello"; 이렇게 만들면 참조를 하나만 하고 둘이 같은 참조값(번지)을 가지는 것이다.


클래스 영역 | 스택영역 | 힙영역

----------------------------------------------------------------------------

String aa1 = new (#11)hello

String aa2 = new (#22)hello

<---- String aa3 = ""

(#33)

<---- String aa4 = ""


위와 같이 생기는 영역도 조금 다르다.



그리고 아래와 같은 상황에서는 둘다 똑같이 실행이된다. String은 객체생성을 하지않더라고 

"이것이 자바다"같은 문자열을 만들면 주소값이 똑같이 생기고 클래스영역에 생기는 객체가 된다. 그래서 아래와 같이 똑같이 실행된다.


public class StringDemo5 {

public static void main(String[] args) {

String str = "이것이 자바다";

System.out.println(str.length());

System.out.println("이것이 자바다".length());

System.out.println("         this is a java       ".trim().toUpperCase().substring(0,5));

}

}

-------------------------------결과------------------------------------

7

7

THIS





아래와 같은 두가지 식이있다면 작성은 무조건 ②번으로 해야한다. 왜냐하면 x=null일경우 

① 번은 null은 아예 비교가 안되기 때문에 에러가 나고 ②번같은경우 null이 없는 상태라 그냥 결과없이 내려간다.


String x = member.getRole();


// x = null 일경우 때문에 ②번 사용


if (x.equals("admin")){


} else if (x.equals("user")) {


} else if (x.equals("guest")) {


}


if ("admin".equals(x)) {


} else if ("user".equals(x)) {


} else if ("guest".equals(x)) {


}





String의 메소드를 외워야 할것이 좀 있다.


byte[] .getByte() : byte[]로 리턴

====================================




// boolean .equals(Object other) : 다른 문자열과 내용을 비교해서 동일한지 여부를 반환한다.

//         Object의 equals(Object other)을 재정의한 것


String name1 = new String("이순신");

String name2 = new String("이순신");

String name3 = "이순신";

String name4 = "이순신";

/*

1.   ==    주소값 비교

2. equals()  내용 비교

equals()메소드는 String 객체를 생성하는 방법에 상관없이 문자열의 내용이 동일하면

true값을 반환한다. 따라서, 문자열의 비교는 반드시 equals() 메소드를 사용해야 한다.

*/

String name1 = new String("이순신");

String name2 = new String("이순신");

String name3 = "이순신";

String name4 = "이순신";

------실행 결과----------------

false

true

true

true

====================================



// String .toUpperCase() : 소문자를 대문자로 변환해서 반환한다.

// String .toLowerCase() : 대문자를 소문자로 변환해서 반환한다.

- String은 불변 객체이다. 그래서 원본은 바뀌지않고 값만 바꿔서 준다.

  str a = "abc"

= a+"xyz" = "abc"+"xyz" = "abcxyz"인데 값이 바뀌는게 아니라 abcxyz라는 값으로 참조(번지값)가 달라진 새 String으로 만들어진것이다. 


System.out.println(name1 == name2);

System.out.println(name1.equals(name2));

System.out.println(name3 == name4);

System.out.println(name3.equals(name4));


String result1 =str1.toUpperCase();

String result2 = str1.toLowerCase();

System.out.println("결과 1 : "+result1);

System.out.println("결과 2 : "+result2);

System.out.println("원본 1 : "+str1);

----------결과-------------

결과 1 : HELLO WORLD

결과 2 : hello world

원본 1 : Hello World

====================================



// String .replace(String target, String new) : target에 지정된 문자를 새문자(new)로 바꾼 새로운 문자열을 만들어 반환한다.


String str2 = "이것은 자바다. 자바 초급자를 위한 안내서";

String result3 = str2.replace("자바", "파이썬");

System.out.println("원본 2 :"+ str2);

System.out.println("결과 4 :"+ result3);

------------결과---------------

원본 2 :이것은 자바다. 자바 초급자를 위한 안내서

결과 4 :이것은 파이썬다. 파이썬 초급자를 위한 안내서

====================================




// int .length() : 문자열의 길이를 반환한다, 공백도 포함한다.

String str3 = "오늘 점심은 어떤거 먹지?";

int len = str3.length();

System.out.println("문자열의 길이 : "+len);

------------결과------------------

문자열의 길이 : 14

====================================



// String .substring(int beginIndex) : 시작위치에서 끝까지 잘래낸 새로운 문자열을 반환한다. 0부터 시작

// String .substring(int beginIndex, int endIndex) : beginIndex에서 endIndex앞까지 잘래낸 새로운 문자열을 반환한다. 0부터 시작


String str4 = "이것이 자바다";

String result5 = str4.substring(1);

System.out.println("결과5 : "+result5);

String result6 = str4.substring(2,6);

System.out.println("결과6 : "+result6);

--------------결과-------------------------

결과5 : 것이 자바다

결과6 : 이 자바

====================================





// boolean .contains(String str) : 지정된 문자열이 포함되어 있는지 여부를 반환한다.


String str5 = "이것이 자바다.";

boolean result7 = str5.contains("자바");

System.out.println("결과7 : "+result7);

--------------결과---------------------------

결과7 : true

====================================




// boolean .startsWith(String str) : 지정된 문자열로 시작하는지 여부를 반환한다.

// boolean .endsWith(String str) : 지정된 문자열로 끝나는지 여부를 반환한다.


String str6 = "http://www.daum.net";

String str7 = "www.google.com";

String str8 = "www.naver.com";

System.out.println("결과8 : "+str6.startsWith("http"));

System.out.println("결과9 : "+str7.startsWith("http"));

System.out.println("결과10 : "+str8.startsWith("http"));

System.out.println("결과11 : "+str6.endsWith("com"));

System.out.println("결과12 : "+str7.endsWith("com"));

System.out.println("결과13 : "+str8.endsWith("com"));

------------결과--------------------------------------------

결과8 : true

결과9 : false

결과10 : false

결과11 : false

결과12 : true

결과13 : true

====================================



// boolean .isEmpty() : 문자열이 비어있으면 true를 반환합니다.


String str9 = "자바다";

String str10 = "   ";

String str11 = ""; // 빈문자열, empty문자열

System.out.println("결과14 : "+str9.isEmpty());

System.out.println("결과15 : "+str10.isEmpty());

System.out.println("결과16 : "+str11.isEmpty());

--------------결과-------------------------------

결과14 : false

결과15 : false

결과16 : true

====================================



// String .trim() : 문자열의 불필요한 좌우공백을 제거한 새로운 문자열을 반환한다.  예시) 포털사이트 검색시 공백 제거할때 사용

// 단어와 단어사이의 공백은 의미가 있다 생각해 안없앤다. 

String str12 = "         이것이          자바다.                  ";

String result17 = str12.trim();

System.out.println("결과17 : ["+result17+"]");

-----------------결과------------------------------

결과17 : [이것이          자바다.]

====================================




// int .indexOf(String str) : 지정된 문자열이 처음으로 등장하는 위치를 반환한다. 0부터 시작

// indexOf(String str, int fromIndex) : 입력된 int fromIndex의 숫자 뒤에서부터 찾는것이다.

String str13 = "이것이 자바다. 자바 입문용 추천 도서";

int result18 = str13.indexOf("자바");

int result19 = str13.indexOf("파이썬");

System.out.println("결과18 : "+result18); // 0부터 시작

System.out.println("결과19 : "+result19); // 찾을수 없으면 -1이 출력된다.

----------------결과--------------------------------------

결과18 : 4

결과19 : -1

====================================




// char .charAt(int index) : 지정된 위치의 글자를 반환한다. 잘안쓴다.

String str14 = "이것이 자바다";

char result20 = str14.charAt(1);

System.out.println("결과20 : "+result20);

---------------------결과----------------------------------

결과20 : 것

====================================




// String[] .split(String str) : 지정된 문자로 문자열을 자르고 배열에 담아서 반환한다.

String str15 = "이순신,김유신,강감찬,홍길동,유관순";

String[] result21 = str15.split(",");

for(int i=0; i<result21.length; i++) {

System.out.println("결과21 : "+result21[i]);

}

----------------------결과-------------------------------

결과21 : 이순신

결과21 : 김유신

결과21 : 강감찬

결과21 : 홍길동

결과21 : 유관순



사용예시)

package demo3;


import java.util.Scanner;


public class StringDemo4 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.println("이름,국어,영어,수학 정보 입력 > ");

String text = sc.next(); // 입력예 -> 홍길동,60,40,60

String[] valuse = text.split(",");

System.out.println("이름 : "+valuse[0]);

System.out.println("국어 : "+valuse[1]);

System.out.println("영어 : "+valuse[2]);

System.out.println("수학 : "+valuse[3]);

}

}

----------------------결과-------------------------------

이름,국어,영어,수학 정보 입력 > 

이재헌,40,50,60

이름 : 이재헌

국어 : 40

영어 : 50

수학 : 60


====================================




// static String .valueOf(int number)

// static String .valueOf(double number)

// static String .valueOf(boolean number)

// 문자열로 변환해서 반환한다.


// .valueOf(입력) : 입력을받은 모든것을 문자열로 바꿔준다

String x = String.valueOf(1234);

x --> "1234"


String x = String.valueOf(true);

x --> "true"


String x = String.valueOf(3.14)

x --> "3.14"


String result22 = String.valueOf(3.14);

System.out.println("결과22 : "+result22);

-------------------결과-------------------------------

결과22 : 3.14




 valueof와 반대 개념(String String.valueOf(int a)의 반대)이 있다.


int Integer.parseInt(String str) --> 정수로 바뀜

double Double.parseDouble(String str) --> 실수로 바뀜


예시)

int no = Integer.parseInt(Items[0]);


====================================