ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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


     

     

     

Designed by Tistory.