Post

Java인프런

Java CodeSquad 강의 요약

Hello World 프로젝트 생성하기

  1. Eclipse에서 Ctrl + N을 누르면 새 프로젝트를 생성할 수 있음
  2. Java Project를 검색하여 선택하고, 프로젝트 이름을 지정.
  3. 생성된 프로젝트 구조 내의 src 폴더에 접근하여, 다시 Ctrl + N을 눌러 Java Class를 생성
  4. 연습용으로 생성된 자바 파일에서 아래 코드를 작성

    1
    2
    3
    4
    5
    6
    7
    
    package helloWorld;
    
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello World!");
        }
    }
    
  5. 코드를 작성한 후, 우클릭하여 Run As > 1 Java Application을 선택하거나, 상단의 실행 버튼을 클릭하여 프로그램을 실행

GitHub과 Markdown

  • 학습 내용을 정리하는 습관을 기르고, 이를 GitHub에 업로드하여 버전 관리와 협업에 활용하는 방법을 배우기

Eclipse와 GitHub 연동하기

  1. GitHub에 연결할 프로젝트를 우클릭 > Team > Share Project를 선택
  2. Repository 설정 화면에서 프로젝트를 선택하고, Create Repository 버튼을 클릭
  3. 프로젝트를 수정한 후, Team > Add to Index, 그리고 Commit을 통해 변경 사항을 로컬 저장소에 저장
  4. Push를 통해 GitHub에 코드를 업로드함. 이때, GitHub의 URL, 사용자 이름(ID), 그리고 토큰을 사용해 인증

프로그램 연습 및 정리

  • 실습을 마친 후 이해가 가지 않는 부분이나 궁금한 점들을 정리하고, 반복 학습을 통해 숙달.
  • 호기심을 가지고 다양한 시도를 해보며, 컴퓨터와 친숙해지는 것이 중요함

구문

printf vs print vs println

print 메서드는 주어진 데이터를 콘솔에 출력하지만, 출력 후에 줄바꿈을 하지 않습니다. 여러 번 print를 호출하면, 호출된 내용이 모두 같은 줄에 연속해서 표시됩니다. 예: System.out.print(“Hello “); System.out.print(“World!”); 결과는 Hello World!로, 두 문자열이 같은 줄에 표시됩니다.

println 메서드는 주어진 데이터를 콘솔에 출력한 후, 자동으로 줄바꿈을 합니다. 따라서 println을 여러 번 호출하면, 각 호출이 새로운 줄에 표시됩니다. 예: System.out.println(“Hello”); System.out.println(“World!”); 결과는 Hello와 World!가 각각 다른 줄에 표시됩니다.

printf 메서드는 “포맷 지정 출력”을 지원합니다. 즉, 특정 형식에 맞추어 데이터를 문자열로 변환하여 콘솔에 출력할 수 있습니다. printf는 다양한 형식 지정자(예: %d는 정수, %s는 문자열)를 사용하여 변수의 값을 포함한 문자열을 구성할 수 있습니다. printf는 자동으로 줄바꿈을 하지 않으므로, 줄바꿈이 필요한 경우 형식 문자열에 \n (줄바꿈 문자)를 포함해야 합니다. 예: System.out.printf(“나이: %d년\n이름: %s”, 30, “홍길동”); 결과는 나이: 30년, 이름: 홍길동이 됩니다. 줄바꿈을 위해 \n을 사용했습니다.

<요약> print: 출력 후 줄바꿈 없음 println: 출력 후 자동 줄바꿈 printf: 포맷 지정 출력, 자동 줄바꿈 없음 (필요한 경우 \n 사용)

포맷

형식출력
%bboolean 형식으로 출력
%d정수 형식으로 출력
%o8진수 정수의 형식으로 출력
%x 또는 %X16진수 정수의 형식으로 출력
%f소수점 형식으로 출력
%c문자형식으로 출력
%s문자열 형식으로 출력
%n줄바꿈 기능
%e 또는 %E지수 표현식의 형식으로 출력

구구단

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 반복문
int c;
for (int a=1; a <= 9; a++ ) {
	for (int b=1; b <= 9; b++ ) {
		c = a * b;
		System.out.println(a + " * " + b + " = " + c);
	}
	System.out.println("\n");

}

// 조건문
System.out.println("구구단 중 출력할 단은? : ");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
if (num >= 2 && num <= 9) {
	for(int i = 1; i<=9; i++) {
		int ans = num * i;
		System.out.println(num + " * " + i + " = " + ans);
	}
}
else {
	System.out.println("다른 값을 넣어주세요!");
}

캘린더

1강

해야 할 일

일단 git에 리포지토리 생성 > 그러고 이클립스에서 java 프로젝트 하나만들기 > 그 프로젝트 클릭후 컨트롤 + n 눌러서 새클래스 만들기 > 클래스 생성시에 패키지이름이 적혀있는데 그건 지우는거 안좋음 일단 패키지이름을 hounx.calandar로 만들고 name을 Calendar로 해주고 피니쉬

System.out.println(“hi”); 그냥 print 도 가능한데 ln을 붙이는게 더 좋음? 일단 왜 더 좋은지는 검색 필요..? printf 도 잇음 세개나 됨 ; ;

일단 깃허브랑 연동이 필요 프로젝트 누르고 우클리 add to index 누르고 다시 team에서 commit 누르고 다시 push 이번에도 마찬가지로 password는 토큰으로 하고 user은 qkrwldns으로 함

2강

system.out.prinln 활용

컨트롤 + 쉬프트 + f 누르면 정렬해줌

1
2
3
4
5
6
7
8
9
10
11
12
package hounx.calendar;

public class Calendar {
	public static void main(String[] args) {
		System.out.println("일  월  화  수  목  금  토");
		System.out.println("--------------------");
		System.out.println(" 1  2  3  4  5  6  7");
		System.out.println(" 8  9 10 11 12 13 14");
		System.out.println("15 16 17 18 19 20 21");
		System.out.println("22 23 24 25 26 27 28");
	}
}

깃에 업데이트

3강

입력받은 숫자의 합을 구하는 프로그램 작성

src 누르고 class 만들기 이름은 Sum.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package hounx.calendar;

import java.util.Scanner;

public class Sum {
	public static void main(String[] args) {
		// 입력 : 키보드
		// 출력 : 화면
		System.out.println("두 수를 입력하세요");
		Scanner myObj = new Scanner(System.in); // Create a Scanner object

		int int1 = myObj.nextInt(); // Read user input
		int int2 = myObj.nextInt(); // Read user input
		System.out.println("두 수의 합은 " + (int1+ int2)+ "입니다."); // Output user input
		System.out.printf("두 수의 합은 %d입니다.", (int1+ int2)); // Output user input
		myObj.close();
	}
}

4강

입력받은 월의 최대 일수 출력하기

라이브 러리를 활용해서 해당 달의 days를 구함

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Calendar {
    public static void main(String[] args) {

        // 사용자에게 달(월)을 입력하라고 요청합니다.
        System.out.println("달을 입력하세요.");
        Scanner scanner = new Scanner(System.in); // 입력을 받기 위한 Scanner 객체를 생성합니다.
        int month = scanner.nextInt(); // 사용자로부터 달(월)을 입력받습니다.

        // 사용자에게 연도를 입력하라고 요청합니다.
        System.out.println("연도를 입력하세요.");
        int year = scanner.nextInt(); // 사용자로부터 연도를 입력받습니다.

        // 입력받은 연도와 달로 YearMonth 객체를 생성합니다.
        YearMonth yearMonth = YearMonth.of(year, month);
        // 생성된 YearMonth 객체에서 해당 달의 일수를 구합니다.
        int lengthOfmon = yearMonth.lengthOfMonth();
        // 해당 달의 일수를 출력합니다.
        System.out.println("해당하는 달의 일수: " + lengthOfmon);
    }
}

배열을 활용해서 해당 달의 days를 구함

1
2
3
4
5
6
7
8
9
10
11
12
public class Calendar {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("달을 입력하세요");
        int month = scanner.nextInt();

        int[] maxDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        System.out.printf("%d월은 %d일까지 있습니다.", month,maxDays[month - 1]);
        scanner.close();
    }
}

함수를 활용해서 해당 달의 days를 구함

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
// Calendar 클래스를 정의. 이 클래스는 달력과 관련된 기능을 제공.
public class Calendar {
    // MAX_DAYS 배열은 각 달이 몇 일까지 있는지 저장. 예를 들어, 1월은 31일까지 있으므로 첫 번째 값은 31.
    private static final int[] MAX_DAYS = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    // 주어진 달의 최대 일수를 반환하는 메서드. 예를 들어, 2월을 입력하면 28을 반환.
    public int getMaxDaysOfMoth(int month) {
        return MAX_DAYS[month - 1];
    }

    // 메인 메서드 - 프로그램의 시작점.
    public static void main(String[] args) {
        // Scanner 객체를 사용하여 사용자로부터 입력을 받음.
        Scanner scanner = new Scanner(System.in);
        // Calendar 객체를 생성.
        Calendar cal = new Calendar();
        // 사용자에게 달을 입력하라는 메시지를 출력.
        System.out.println("달을 입력하세요");
        // 사용자가 입력한 달을 정수형으로 받음.
        int month = scanner.nextInt();

        // 입력받은 달의 최대 일수를 출력. 예를 들어, 사용자가 3을 입력하면 "3월은 31일까지 있습니다."라고 출력.
        System.out.printf("%d월은 %d일까지 있습니다.\n", month, cal.getMaxDaysOfMoth(month));
        // Scanner를 닫음. 이 작업은 더 이상 입력을 받지 않을 때 사용.
        scanner.close();
    }
}

5강

반복 입력 가능하도록 프로그램 변경하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Calendar {
	private static final int[] MAX_DAYS = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	public int getMaxDaysOfMoth(int month) {
		return MAX_DAYS[month - 1];
	}

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Calendar cal = new Calendar();
        System.out.println("반복횟수를 입력하세요.");
        int num = scanner.nextInt();

        for(int i=1; i<=num; i++) {
        	System.out.println("월을 입력하세요.");
        	int mon = scanner.nextInt();
        	System.out.printf("%d월은 %d일까지 있습니다.", mon,cal.getMaxDaysOfMoth(mon));
        }
        scanner.close();
    }
}

6강

종료 조건을 이용해 반복하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Calendar {
	private static final int[] MAX_DAYS = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	public int getMaxDaysOfMoth(int month) {
		return MAX_DAYS[month - 1];
	}

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Calendar cal = new Calendar();
        int num = 1;
        while (num > 0) {
        	System.out.println("월을 입력하세요.");
            int mon = scanner.nextInt();
            if(mon < 0) {
            	num = 0;
            }else {
            	System.out.printf("%d월은 %d일까지 있습니다.\n", mon,cal.getMaxDaysOfMoth(mon));
            }
        }
        System.out.println("종료되었습니다.");
        scanner.close();
    }
}

7강

가상의 달력 찍기

내가 한 것

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
public class Calendar {
	private static final int[] MAX_DAYS = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	public int getMaxDaysOfMoth(int month) {
		return MAX_DAYS[month - 1];
	}

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Calendar cal = new Calendar();
        int num = 1;
        while (num > 0) {
        	System.out.println("월을 입력하세요.");
            int mon = scanner.nextInt();
            if(mon < 0) {
            	num = 0;
            }else {
            	int monReturn = cal.getMaxDaysOfMoth(mon);
            	if(monReturn == 28) {
            		System.out.println("일  월  화  수  목  금  토");
            		System.out.println("--------------------");
            		System.out.println(" 1  2  3  4  5  6  7");
            		System.out.println(" 8  9 10 11 12 13 14");
            		System.out.println("15 16 17 18 19 20 21");
            		System.out.println("22 23 24 25 26 27 28");
            	}else if(monReturn == 30) {
            		System.out.println("일  월  화  수  목  금  토");
            		System.out.println("--------------------");
            		System.out.println(" 1  2  3  4  5  6  7");
            		System.out.println(" 8  9 10 11 12 13 14");
            		System.out.println("15 16 17 18 19 20 21");
            		System.out.println("22 23 24 25 26 27 28");
            		System.out.println("29 30");
            	}else {
            		System.out.println("일  월  화  수  목  금  토");
            		System.out.println("--------------------");
            		System.out.println(" 1  2  3  4  5  6  7");
            		System.out.println(" 8  9 10 11 12 13 14");
            		System.out.println("15 16 17 18 19 20 21");
            		System.out.println("22 23 24 25 26 27 28");
            		System.out.println("29 30 31");
            	}
            }
        }
        System.out.println("종료되었습니다.");
        scanner.close();
    }
}

효율적인 코드

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
63
64
65
66
67
68
69
70
71
// 일단 Calendar class 와 Prompt class를 만듦
// ## Calendar ##
package hounx.calendar;

// Calendar 클래스: 달력을 만들고, 달의 날짜를 계산하는 클래스입니다.
public class Calendar {
    // MAX_DAYS: 각 달이 몇 일까지 있는지 저장하는 배열입니다. 예를 들어, 1월은 31일까지 있습니다.
    private static final int[] MAX_DAYS = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    // getMaxDaysOfMonth: 원하는 달이 몇 일까지 있는지 알려주는 함수입니다.
    public int getMaxDaysOfMonth(int month) {
        return MAX_DAYS[month - 1];
    }

    // printCalendar: 달력을 화면에 보여주는 함수입니다. 연도와 월을 입력받아 그 달의 달력을 출력합니다.
    public void printCalendar(int year, int month) {
        System.out.printf("    <<%4d년 %2d월>>\n", year, month); // 연도와 월을 보여줍니다.
        System.out.println(" Su Mo Tu We Th Fr Sa"); 
        System.out.println("---------------------"); 

        int maxDay = getMaxDaysOfMonth(month); // 그 달이 몇 일까지 있는지.

        // 1일부터 마지막 날까지 날짜를 출력합니다. 일주일이 지날 때마다 다음 줄로 넘어갑니다.
        for (int i = 1; i <= maxDay; i++) {
            System.out.printf("%3d", i);
            if (i % 7 == 0) {
                System.out.println();
            }
        }
    }
}
// ## Prompt ##
package hounx.calendar;

import java.util.Scanner; // 사용자로부터 입력을 받기 위해 Scanner를 가져옵니다.

// Prompt 클래스: 사용자와 소통하며 달력을 보여주는 클래스입니다.
public class Prompt {
    private final static String PROMPT = "cal> "; // 사용자에게 입력을 요청할 때 보여줄 문구입니다.

    // runPrompt: 실제로 프로그램을 실행하는 함수입니다. 사용자로부터 월을 입력받아 해당 월의 달력을 보여줍니다.
    public void runPrompt() {
        Scanner scanner = new Scanner(System.in); // 입력을 받기 위한 Scanner 객체를 만듭니다.
        Calendar cal = new Calendar(); // 달력 기능을 사용하기 위한 Calendar 객체를 만듭니다.

        int month; // 사용자로부터 입력받은 월을 저장할 변수입니다.

        while (true) { // 계속 반복합니다.
            System.out.println("월을 입력하세요. (종료하려면 -1 입력)"); // 사용자에게 월을 입력하라고 알려줍니다.
            System.out.print(PROMPT); // 프롬프트 문구를 보여줍니다.
            month = scanner.nextInt(); // 사용자로부터 월을 입력받습니다.
            if (month == -1) { // -1을 입력하면 반복을 멈추고 종료합니다.
                break;
            } else if (month < 1 || month > 12) { // 1보다 작거나 12보다 큰 숫자를 입력하면 잘못된 입력이라고 알려줍니다.
                System.out.println("잘못된 입력입니다. 1월에서 12월 사이의 값을 입력하세요.");
                continue; // 다시 입력받기 위해 반복의 시작으로 돌아갑니다.
            }
            cal.printCalendar(2024, month); // 정상적인 월을 입력받았으면 해당 월의 달력을 출력합니다.
        }

        System.out.println("종료되었습니다."); // 프로그램이 끝났으니 "종료되었습니다."라고 알려줍니다.System.out.println("종료되었습니다.");
        scanner.close(); // 사용이 끝난 scanner 객체를 닫아줍니다. 더 이상 사용자로부터 입력을 받지 않을 때는 항상 닫아 주는 것이 좋습니다.
    }

    // 프로그램의 시작점인 main 메서드예요. 여기서부터 모든 일이 시작됩니다.
    public static void main(String[] args) {
        Prompt p = new Prompt(); // Prompt 클래스의 객체를 하나 생성합니다. 
        p.runPrompt(); // 만든 'p' 객체를 이용해서 runPrompt 함수를 실행. 이 함수가 실제로 프로그램을 동작시키는 부분.
    }
}

궁금했던것

private가 뭔지 gpt한테 물어봄

답변:
private를 붙이면, 그 멤버는 해당 클래스 내부에서만 접근할 수 있게 됨.
다른 클래스에서는 직접 접근할 수 없음. private 키워드의 주된 목적은 캡슐화와 데이터 은닉을 실현.

final도 물어봄

답변:
변수에 final 사용

1
2
final int MAX_VALUE = 100;
// MAX_VALUE = 200; // 이 코드는 컴파일 오류를 발생시킵니다. final 변수의 값은 변경할 수 없습니다.

메서드에 final 사용

1
2
3
4
5
6
7
8
9
10
11
12
public class SuperClass {
    public final void show() {
        System.out.println("이 메서드는 오버라이드할 수 없습니다.");
    }
}

public class SubClass extends SuperClass {
    // @Override
    // public void show() { // 이 코드는 컴파일 오류를 발생시킵니다. final 메서드는 오버라이드할 수 없습니다.
    //     System.out.println("오버라이드 시도");
    // }
}

클래스에 final 사용

1
2
3
4
5
6
7
public final class FinalClass {
    // 클래스 내용
}

// public class ExtendedClass extends FinalClass { // 이 코드는 컴파일 오류를 발생시킵니다. final 클래스는 상속할 수 없습니다.
//     // 클래스 내용
// }

public void vs public static void

1
2
3
4
public void: 인스턴스 메서드로, 객체의 상태에 접근하고 조작하는 데 사용됩니다.
객체를 생성하고 그 객체를 통해 메서드를 호출해야 합니다.
public static void: 정적 메서드로, 객체의 상태와 무관하게 동작하는 클래스 레벨의 메서드입니다.
객체 생성 없이 클래스 이름을 통해 직접 호출할 수 있습니다.

객체란?

상자(객체)의 예를 들어보자면, ‘연필’ 상자를 생각해 볼 수 있음. 이 상자에는 연필의 ‘색깔’, ‘길이’ 같은 정보(데이터)가 들어 있고, ‘쓰기’라는 동작(메서드)을 할 수 있음.

예제:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Pencil {
    String color; // 연필의 색깔
    int length; // 연필의 길이

    // 연필로 글씨를 쓰는 동작
    void write() {
        System.out.println(color + " 색 연필로 글씨를 씁니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Pencil myPencil = new Pencil(); // '연필' 상자를 하나 만듭니다.
        myPencil.color = "파랑"; // 이 상자의 색깔을 '파랑'으로 설정합니다.
        myPencil.length = 10; // 이 상자의 길이를 10으로 설정합니다.

        myPencil.write(); // '파랑 색 연필로 글씨를 씁니다.'라고 출력하면서, 상자의 '쓰기' 동작을 사용해봅니다.
    }
}

여기서 Pencil 클래스가 바로 ‘연필’ 상자의 설계도.
그리고 myPencil이라는 변수로 실제 ‘연필’ 상자를 만들어서,
그 상자의 색깔을 ‘파랑’으로 설정하고, 길이를 10으로 정한 다음, ‘쓰기’라는 동작을 사용해 본 것.

This post is licensed under CC BY 4.0 by the author.