본문 바로가기
명품 자바

명품자바 6장 모듈, 패키지

by hoshi03 2023. 12. 31.

default로 선언하면 같은 패키지 않에서만 작동한다

package test;형태로 어느 패키지에 속하는 지 알 수 있고

import test.클래스명 형태로 가져올 수 있다

 

toString() 을 클래스 안에서 오버라이딩 한 후 자기만의 문자열을 리턴할 수 있다

String의 값을 비교할 때는 equals로 문자열을 비교하고 같은 레퍼런스 인지 비교할때 ==를 사용한다

 

wrapper 클래스

int, char 등의 기본 타입을 객체로 만들어서 사용할 수 있게 래퍼 클래스를 사용한다

 

Wrapper 객체는 Integer i =  Integer.valueOf(10); 형태로 valueOf() 메서드를 통해서 생성한다

! 숫자를 다루는 래퍼 클래스는 Integer i = Integer.valueOf("10"); 형태로 문자열을 변환해서 생성 가능하다

 

래퍼 클래스는 기본 타입 <-> 문자열 하는 기능을 할떄 유용하다

 

자주 사용하는 int i = Integer.parseInt("123") 형태 등 parse~ 붙이는 걸로 문자열을 기본 타입으로 변환 가능하다

반대로 기본타입을 문자열로 바꿀때는 toString 메서드를 사용한다.

 

박싱 & 언박싱

 

기본 -> 래퍼 객체로 변환하는 걸 박싱, 반대를 언박싱이라고 한다

박싱과 언박싱은 자동으로 처리이루어진다

 

String 클래스 <- 스트링은 모두 객체로 처리된다

 

스트링 객체는 수정이 불가능하고 새로 재정의 하는 방식으로 변경한다

 

charat, compareTo, contains, replace, split 등 문자열 메서드는 잘 숙지해두자

 

split을 사용할때는

 

String s[] = a.split(",") 형태로 스트링 배열로 리턴받는다

a.substring(5) 메서드를 사용하면 5번 인덱스부터 끝가지 스트링을 리턴한다

 

StringBuffer 클래스

 

StringBuffer는 가변

StringBuffer sb = new StringBuffer("java"); 형태로 선언한다

append, delete, insert, replce, reverse, capacity 등 자주 쓴느 메서드가 있다

 

StringTokenizer - 특정 문자를 기준으로 문자열을 분리, split 같은 기능이다

 

String query = "name=ho&addr=seoul&age=21";

StringTokenizer st = new StringTokenizer(query, "&=");

이렇게 하면 '&'와 '=' 두개를 기주으로 문자열을 분리해준다

int count = st.countTokens();로 몇개로 분리됬는지를 보고

String token = st.nextToken() 으로 각 토큰에 접근해서 문자열을 가져올 수 있다

 

hasMoreTokens() 메서드는 다음 토큰이 잇으면 true를 리턴한다 

 

연습문제

 

tostring, equals 재정의

equals를 오버라이딩하면 obj 타입으로 와서 Circle c = (Circle) obj 형태로 강제형변환을 해줘야 비교가능하다!

import java.util.*;

class Circle{
    int x,y,radius;

    Circle(int x, int y, int radius){
        this.x = x;
        this.y = y;
        this.radius = radius;
    }

    @Override
    public String toString() {
        return "Circle" +x+y;
    }

    @Override
    public boolean equals(Object obj) {
        Circle c = (Circle) obj;
        if (this.x == c.x & this.y == c.y) return true;
        return false;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Circle a = new Circle(2,3,5);
        Circle b = new Circle(2,3,30);
        System.out.println(a);
        System.out.println(b);
        if (a.equals(b)) System.out.println("같음");
        else System.out.println("다름");


    }
}

 

7번

StringTokenizer 보단 split 이 더 편한 것 같다

import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (true){
            String ss = in.nextLine();
            if (ss.equals("그만")){
                System.out.println("종료합니다...");
                break;
            }
            //1번
            StringTokenizer st = new StringTokenizer(ss," ");
            System.out.println("어절 개수는 " + st.countTokens());
            //2번
            String[] arr = ss.split(" ");
            System.out.println("어절 개수는 " + arr.length);
        }
    }
}

 

문자열을 한글자씩 회전

import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String ss = in.nextLine();
        String start = ss.substring(0);
        while (true){
            String s =  ss.substring(0,1);
            ss = ss.substring(1) + s;
            System.out.println(ss);
            if ((ss).equals(start)) break;
        }
    }
}

 

StringBuffer를 이용해서 문자열을 수정 love!LOVE는 love를 LOVE로 수정하는 것

sb.indexOf("찾을 문자열") 형태로 스트링빌더에서 문자열이 어디서부터 시작하는지 찾을 수 있고

sb.replace(시작인덱스,끝 인덱스, 교체할 문자열) 형태로 문자열을 교체할 수 있다

import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        String s = in.nextLine();
        StringBuffer sb = new StringBuffer(s);


        while (true){
            System.out.print("명령 : ");
            String order = in.nextLine();
            String[] splits = order.split("!");
//            for (String x : splits ) System.out.println(x);
            if (order.equals("그만")){
                System.out.println("종료합니다");
                break;
            }
            if (splits.length < 2) {
                System.out.println("잘못된 명령입니다");
                continue;
            }

            int index = sb.indexOf(splits[0]);
            if (index == -1) {
                System.out.println("찾을 수 없습니다!");
            }

            else {
                if (splits[0].length() == 0 || splits[0].length() == 0){
                    System.out.println("잘못된 명령입니다");
                    continue;
                }
                sb.replace(index, index+splits[0].length(),splits[1]);
                System.out.println(sb);
            }
        }
    }
}

'명품 자바' 카테고리의 다른 글

명품자바 7장 제네릭,컬렉션  (1) 2023.12.31
명품자바 5장  (1) 2023.12.26
명품자바 4장  (1) 2023.12.23
가비지 발생시점  (0) 2023.11.17