-
221215. 자바9. 라이브러리(String, Object)스타터스 백엔드 3기 2022. 12. 15. 16:58
하루입니다.
자바의 라이브러리
- java.lang : Object, String, Integer
- java.util : Set, List, Map, Date
- java.io : 입출력, 키보드입력, 파일입력
- java,net : 네트워크, 서버, 클라이언트
- java.sql
java.lang
- 1. 자바언어 기본기능 클래스 모음
- 2. import 안 해도 된다.
Object
- 자바의 모든 클래스가 자동으로 상속받는다.
- 자바의 최상위클래스이다.
- non-private 메소드들은 다른 자바 클래스에 자동으로 포함된다.
- overriding 사용
- toString() : 객체 정보를 문자열로 표현한다.
- equals() : 두 객체의 주소값을 비교한다. 오버라이딩하면 다른 값을 비교한다.
- hashcode()
Object
- == 연산자 overriding 불가능
- 그런데 +는 overroading 유사하당. a + a = aa로 하고, 1 + 2는 3이니까
- 기본형변수 리터럴값 동일
- 참조형변수는 주소값이 동일하면 객체도 동일하다.
- equals메소드는 overriding 가능하다.
toString()
In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method. The string output is not necessarily stable over time or across JVM invocations.
- 출력문 안에서 자동으로 출력된다는 특징이 있다.
- syso(o1); 과 syso(o1.toString());은 같다.
- 객체 정보를 문자열로 표현한다.
java.lang.Object@8646db9
getClass().getName() + "@" + Integer.toHexString(hashCode());
객체 위치(주소값)를 해시코드 16진수로 나타낸다.
equals
- 두 객체의 주소값을 비교한다. 오버라이딩하면 다른 값을 비교한다.
- boolean equals(Object obj)
toString(), equals() overriding 전
public static void main(String[] args) { MyObject o1 = new MyObject("myobject"); MyObject o2 = new MyObject("myobject"); System.out.println(o1.toString()); // chap9.MyObject@7c30a502 System.out.println(o2.toString()); // chap9.MyObject@49e4cb85 System.out.println(o1 == o2); // false System.out.println(o1.equals(o2)); // false }toString(), equals() overriding 후
public static void main(String[] args) { MyObject o1 = new MyObject("myobject"); MyObject o2 = new MyObject("myobject"); System.out.println(o1.toString()); // MyObject [message=myobject] System.out.println(o2.toString()); // MyObject [message=myobject] System.out.println(o1 == o2); // false System.out.println(o1.equals(o2)); // true } ______________________________________________________________________ @Override public String toString() { return "MyObject [message=" + message + "]"; } @Override public int hashCode() { return Objects.hash(message); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; MyObject other = (MyObject) obj; return Objects.equals(message, other.message); }HashCode()
- 객체 해쉬값을 리턴하는 메소드이다.
- 메모리 내 변수 저장 위치 조회가 빈번하다면, 조회 알고리즘을 효율적으로 짜야 한다.
- 그 나머지를 나누는 거! 7이라고 하면 7/5 나머지는 2니까 2에 저장한다 이거!
- 객체의 주소는 객체의 고유값이다. 서로 다르다.
java.lang
String class
- 문자열 저장 클래스이다.
- heap영역에 먼저 생성된 문자열 영역의 내용은 불변이다.
- 문자열 참조 변수가 문자열 내용을 계속 변경한다면 메모리 문자열은 계속 비효율적이다.
- StringBuffer 사용하면 해결된다.
- 덧셈연산자 사용 가능 클래스이다.
- new 키워드 없이도 사용할 수 있다. 기본형변수처럼 사용 가능하다.
String s1 = new String ("aaa");
s1 = ("bbb");
String s2 = new String ("ccc");
s2 = s2 + s1;stack heap s1 : 200번지 100번지 : "aaa"
200번지 : "bbb"
300번지 : "ccc"
400번지 : "cccbbb" 이렇게 계속 생긴다

- A.java는자동컴파일되고, A.class파일 시점에서는 java 메모리가 할당되어있다. 리터럴 내용만 같다면 같은 객체를 참조하게 된다.
- String s1 = "java";
- String s2 = "java";
- 값은 같아도 새로운 객체를 생성하는 거임!!!
- String s2 = new String ("ccc");
- String s22 = new String ("ccc");
null
class A {
String s1; 자동으로 null로 초기화됨
String s3 = ""; 명시적 초기화
void m1 {
String s2; 자동 초기화 안 됨. 명시적 초기화 필요
syso(s1.length()); nullpointerException
syso(s3.length()); 0
}
}
split(구분자)

정규표현식
"010-222-3333".startWith("^010[A-z0-9가-힣]+$")
아무 문자 한개 이상 +
{n} n개 포함 {n,m} n개 이상 m개 이하 {n,} 최소 n개 이상 (최대치 X) [a]{n} /
[A-z0-9가-힣]{n}소문자 a만 n개 /
영소대문자 한글 숫자 n개 포함
기호
\ 는 이스케이프 문자^ 문자열 시작 $ 문자열 종료 . 아무 문자 1개 + 아무 문자 1개 이상 ? 아무 문자 0개 이상 (a|b)
(a|b)?a 또는 b 1문자
a 또는 b 1문자 0개 이상[\.]{4} '.' 포함 4개 \w [A-z0-9가-힣] _ \d [0-9] \s [ ] 공백입니까? //.
//?.
?전화번호양식
010[0-9]{3,4}[0-9]{4}
010\d{3,4}\d{4}
http로 시작
^http\\w?

join
유의사항
- StringJoiner와 join는 String 타입으로 매개변수를 받는다. 당연함 String 메소드들임
- join은 메소드이다.
- String.join(" : ", arr2)
- StringJoiner는 클래스라서 객체 생성 후 사용해야 한다.
- StringJoiner sj = new StringJoiner(" - ");
- sj.toString();
- String을 int로 바꾸는 건 Integer.parseInt( ) 이다.
- int를 String으로 바꾸는 건 String.valueOf( ) 이다.
- StringJoiner는 여러 문자들을 연결할 때 붙일 구분자(delimiter) 를 지정할 수 있다.
기존방식
public static void main(String[] args) { int arr[] = {1, 2, 3, 4, 5, 6}; for(int i = 0; i < arr.length; i++) { System.out.print(arr[i] + ", "); } System.out.println(); } ------------------------------------------------------- 1, 2, 3, 4, 5, 6, 6 뒤의 ,를 뺍시다!!!방법 1. String.join(" 구분자 ", 배열 이름)
System.out.println(String.join(" : ", arr2)); 1 : 2 : 3 : 4 : 5 : 6
방법 2. StringJoiner sj = new StringJoiner(" - ");StringJoiner sj = new StringJoiner(" - "); for(int i = 0; i < arr.length; i++) { sj.add(String.valueOf(arr[i])); } System.out.println(sj.toString()); 1 - 2 - 3 - 4 - 5 - 6방법 3. String.join(" 구분자 ", 배열 이름)
StringJoiner sj1 = new StringJoiner(" - ", "(", ")"); for(int i = 0; i < arr.length; i++) { sj1.add(String.valueOf(arr[i])); } System.out.println(sj1.toString()); (1 - 2 - 3 - 4 - 5 - 6)StringJoiner OverridingTest HashCodeTest SplitTest

'스타터스 백엔드 3기' 카테고리의 다른 글
221219 자바 11. 컬렉션 프레임워크 (List, Set, Map) (0) 2022.12.19 유데미 스타터스 취업 부트캠프 3기 - 백엔드 4주차 (0) 2022.12.16 221215 자바8. 예외처리 (0) 2022.12.15 자바의 내부클래스와 익명클래스의 이해 (0) 2022.12.14 221214 자바 7. 인터페이스, 내부클래스, 익명클래스, (0) 2022.12.14