Java인프런
Java CodeSquad 강의 요약
Hello World 프로젝트 생성하기
- Eclipse에서
Ctrl + N
을 누르면 새 프로젝트를 생성할 수 있음 Java Project
를 검색하여 선택하고, 프로젝트 이름을 지정.- 생성된 프로젝트 구조 내의
src
폴더에 접근하여, 다시Ctrl + N
을 눌러Java Class
를 생성 연습용으로 생성된 자바 파일에서 아래 코드를 작성
1 2 3 4 5 6 7
package helloWorld; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }
- 코드를 작성한 후, 우클릭하여
Run As
>1 Java Application
을 선택하거나, 상단의 실행 버튼을 클릭하여 프로그램을 실행
GitHub과 Markdown
- 학습 내용을 정리하는 습관을 기르고, 이를 GitHub에 업로드하여 버전 관리와 협업에 활용하는 방법을 배우기
Eclipse와 GitHub 연동하기
- GitHub에 연결할 프로젝트를 우클릭 >
Team
>Share Project
를 선택 Repository
설정 화면에서 프로젝트를 선택하고,Create Repository
버튼을 클릭- 프로젝트를 수정한 후,
Team
>Add to Index
, 그리고Commit
을 통해 변경 사항을 로컬 저장소에 저장 Push
를 통해 GitHub에 코드를 업로드함. 이때, GitHub의 URL, 사용자 이름(ID), 그리고 토큰을 사용해 인증
프로그램 연습 및 정리
- 실습을 마친 후 이해가 가지 않는 부분이나 궁금한 점들을 정리하고, 반복 학습을 통해 숙달.
- 호기심을 가지고 다양한 시도를 해보며, 컴퓨터와 친숙해지는 것이 중요함
구문
printf vs print vs println
println
메서드는 주어진 데이터를 콘솔에 출력한 후, 자동으로 줄바꿈을 합니다. 따라서 println을 여러 번 호출하면, 각 호출이 새로운 줄에 표시됩니다. 예: System.out.println(“Hello”); System.out.println(“World!”); 결과는 Hello와 World!가 각각 다른 줄에 표시됩니다.<요약> print: 출력 후 줄바꿈 없음 println: 출력 후 자동 줄바꿈 printf: 포맷 지정 출력, 자동 줄바꿈 없음 (필요한 경우 \n 사용) 요약>
printf
메서드는 “포맷 지정 출력”을 지원합니다. 즉, 특정 형식에 맞추어 데이터를 문자열로 변환하여 콘솔에 출력할 수 있습니다. printf는 다양한 형식 지정자(예: %d는 정수, %s는 문자열)를 사용하여 변수의 값을 포함한 문자열을 구성할 수 있습니다. printf는 자동으로 줄바꿈을 하지 않으므로, 줄바꿈이 필요한 경우 형식 문자열에 \n (줄바꿈 문자)를 포함해야 합니다. 예: System.out.printf(“나이: %d년\n이름: %s”, 30, “홍길동”); 결과는 나이: 30년, 이름: 홍길동이 됩니다. 줄바꿈을 위해 \n을 사용했습니다.
포맷
형식 | 출력 |
---|---|
%b | boolean 형식으로 출력 |
%d | 정수 형식으로 출력 |
%o | 8진수 정수의 형식으로 출력 |
%x 또는 %X | 16진수 정수의 형식으로 출력 |
%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으로 정한 다음, ‘쓰기’라는 동작을 사용해 본 것.