국비 수업 5일차

김성수·2022년 10월 16일
0
post-thumbnail

1. 가변인자

※ p가변인자 함수의 매개변수 개수가 고정적이지 않고, 변할 수 있다는 의미

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package day05;
 
public class Ex01 {
    public static void main(String[] args) {
        // 1) 문자열을 원하는 서식에 맞춰서 만들어주는 String.format()
        
        String name = "아메리카노";
        int price = 1500;
        System.out.printf("%s : %,d원\n",name, price);
            
        // printf() 문자열을 서식에 맞춰서 화면에 출력한다
        // String.format()은 같은 방법으로 문자열을 만들어서 반환한다 (변수에 저장 가능)
        
        String result = String.format("%s : %,d원\n", name, price);
        System.out.println(result);
        
        // 서식 제어 문자
        /*
         *        제어문자        자료형 
         *         %s            String            문자열을 표현하는 서식문자
         *         %d            정수                정수를 10진수 형태로 표현
         *        %f            실수                실수를 표현
         *        %c            글자                정수를 코드에 맞는 글자로 표현(char)
         *        %x            정수                정수를 16진수 형태로 표현
         *
         * 1) % 와 글자 사이에 정수를 넣어서 자리차지할 칸 수를 지정할 수 있다
         * 2) 정수는 %02d 와 같이 2자리로 출력하고, 값이 부족하면 0으로 채울 수 있다
         * 3) 실수는 %.2f 와 같이 소수점 이하 자리를 2자리까지만 표현할 수 있다
         * 4) 숫자는 %,d 와 같이 천단위 구분기호를 자동으로 처리할 수 있다
         * 
         *  
         *  
        */    
        
        System.out.printf("[%s]\n""Java");
        System.out.printf("[%10s]\n""Java");
        System.out.printf("[%-10s]\n""Java");
 
        
        System.out.printf("[%d]\n"1326000);
        System.out.printf("[%9d]\n"1326000);
        System.out.printf("[%09d]\n"1326000);
        System.out.printf("[%,09d]\n"1326000);
 
        System.out.printf("[%02d : %02d]\n"127 / 60 , 127 % 60);    // 가변인자 함수의 매개변수 개수가 고정적이지 않고, 변할 수 있다는 의미
        
        System.out.printf("[%f]\n"3.14);    // 자릿수를 지정하지 않으면 소수점 이하 6자리까지 출력
        System.out.printf("[%f]\n",3.1415926535);
        System.out.println(3.1415926535);
        System.out.printf("[%.4f]\n",3.1415926535);
        System.out.printf("[%.4f]\n",100.0 );    // 정수를 넣으면 예외 발생
        
        System.out.printf("[%c]\n",65);
        System.out.printf("[%c]\n",66);
        System.out.printf("[%c]\n",44032);
        System.out.printf("[%c]\n",44033);
        System.out.printf("[%c]\n",'나');
        System.out.printf("[%c]\n",'나'+ 1);
        
    }
}
 
cs


※ 아래와 같이 함수의 매개변수에 (int... 변수명)을 사용하여 전달하는 인자의 개수를 변경 시킬 수 있다.

매우 중요하니 꼭 기억하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package day05;
 
public class Ex02 {
    
    static int sum(int... args) {
        // 자바에서 특정 객체의 자료형을 알고싶다면, getClass()
//        System.out.println(args);
//        System.out.println(args.getClass());    // 패키지.클래스
//        System.out.println(args.getClass().getSimpleName());    // 클래스
        int total = 0;
        for(int i = 0; i < args.length; i++) {
            total += args[i];
        }
        
        return total;
    }
    
    public static void main(String[] args) {
        // 가변 인자 : 함수 호출 때 전달하는 인자의 개수가 변할 수 있다
        
        int n1 = sum(1);
        int n2 = sum(12);
        int n3 = sum(123);
        int n4 = sum(1234 );
        
        System.out.printf("%d, %d, %d, %d\n", n1, n2, n3, n4);
        
        
    }
}
 
cs


2. 문자열 관련 함수

예시) 문자열 = "root:x:0:0:root:/root:/bin/bash"

  • split(":"); '구분자'라고 명칭하며, 반드시 문자열 배열 형태로 반환된다. 위에 예시로 들어간 문자열로 설명하자면 ":"를 기준으로 문자열을 나눠 배열에 저장한다.
  • substring(8 , 24) : 문자열 빼기 (-) ~ 부터 ~ 까지 문자열을 잘라주는 기능을 가졌다
    Python(파이썬)의 슬라이싱을 떠올리면 된다.
  • s1.equals(s2) : 문자열을 비교하는 equal 함수
    == 는 해시를 비교하지만 equal은 문자 그 자체가 같은지를 확인해준다 그냥 문자열을 비교하고 싶다면 무조건 equal을 사용하면 된다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class Ex03 {
    public static void main(String[] args) {
        // 문자열 관련 함수
        
        
        String s1 = "root:x:0:0:root:/root:/bin/bash";
        String[] arr = s1.split(":");    // 여기서 ":" 역할을 '구분자'라고 명칭한다
        
        for(int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        
        System.out.println();
        
        String s2 = "https://search.naver.com/search.naver?query=아이유&where=image";
        String[] a1 = s2.split("\\?");        // ? 는 별도의 기능이 있어서 제거함
        String[] a2 = a1[1].split("&");
        for(int i = 0; i < a2.length; i++) {
            String[] a3 = a2[i].split("=");
            System.out.printf("%s : %s\n", a3[0] , a3[1]);
            System.out.println();
            
            // substring : 문자열 빼기 (-)
            // a.substring(int beginIndex, int endIndex)
            
            String s3 = s2.substring(824);    // ~ 부터 ~ 까지 문자열을 잘라주는 기능을 가졌다
            System.out.println(s3);
            
            int beginIndex = s2.indexOf("search");
            int endIndex = s2.lastIndexOf("search"- 1;
            
            System.out.printf("%d ~ %d\n", beginIndex, endIndex);
            
            String s4 = s2.substring(beginIndex, endIndex);
            System.out.println(s4);
            
            // 문자열의 일치 비교
            String t1 = "apple";
            String t2 = new String("apple");
            String t3 = "apple";
            
            System.out.printf("%s, %s, %s\n", t1, t2, t3 );
            
            // 바라보는 대상이 일치하는가
            System.out.println("t1 == t2 : " + (t1 == t2));
            System.out.println("t1 == t3 : " + (t1 == t3));
            
            // 각 대상의 내용이 똑같은가
            System.out.println("t1.equals(t2) : " + t1.equals(t2));
            System.out.println("t1.equals(t3) : " + t1.equals(t3));
            
        }
    }
}
cs

3. 리터널 상수

  • 상수는 변하지 않는 변수를 의미하며(메모리 위치) 메모리 값을 변경할 수 없다.
  • 리터럴은 변수의 값이 변하지 않는 데이터(메모리 위치안의 값)를 의미한다.
  • 출처 : [개발자로 홀로 서기:티스토리]

4. 자료 보충) 문자열을 비교하는 equals

equals

반대로 Tip : equals 의 반대는!?!!?

바로

if(!string.equlas("문자열")ex )

if(!str1.equals("AA")) {
System.out.println("AA가 아닙니다");
}
출처: https://kmj1107.tistory.com/207 [토순이네집:티스토리]

5. string.length 기능으로 for문을 돌릴때

for (int i = 0; i < String.length; i++ ) {}
위와 같은 경우 <= 을 사용하면 없는 위치를 지정하여 무조건 에러가 나므로 주의해야한다.

생성자(Constructor)

생성자는 new 연산자를 통해서 인스턴스를 생성할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메소드(하지만 메소드와는 다르다.)이다. 생성자는 인스턴스 변수(필드 값 등)를 초기화 시키는 역할을 한다.

profile
다들 잘하는데 나만 못해?

0개의 댓글