설치
- zulu에서 자바 17(LTS) 버전 설치 → 강의 환경이기 때문에 적어도 “17” 버전은 맞춰줘야 함. 이게 다르면 코드 작성에 문제가 있을 수 있다.
- 왜 17인가? 지금 현업에서 많이 쓰기 때문
- 인텔리제이 IDE 설치 → 난 vscode 쓸거긴 한데 일단 깔아는 두기로 했음. 깔아서 손해볼 거 없잖아.
개념을 똑바로 아세요
- 변수: 개발자는 variable이라고 대답하면 안돼요 메모리 공간에 하나의 값을 할당하기 위한 데이터 형식이라고 대답해야 맞다
- 프레임워크와 라이브러리: 붕어빵틀 알죠? 면접관들 연배에 맞게 대답하세요. 그 사람들은 붕어빵으로 배웠어.
- 프로그램: 이건 사실상 순서도죠. 프로그래머는 순서도를 작성하는 기계고요 프로그래밍은 순서도를 작성하는 일입니다
- 배열: 같은 자료형의 여러 값을 하나의 변수명에 묶어서 저장. “같은 자료형”인 게 중요해. 파이썬 list는 배열 아닙니다.
- 강타입과 약타입 언어: 서로 다른 자료형끼리 연산을 시켰을 때 오류가 나면 강타입(예: 파이썬), 오류가 안 나고 알아서 계산해주면 약타입(예: 자바스크립트)
- 함수와 메소드의 차이: 함수는 그냥 정의된 기능, 메소드는 그게 클래스 안에 있는 것
- 객체: 상태와 행동의 집합. 클래스는 그 객체를 양산하기 위한 틀이자 생산자. 클래스 없이 객체를 선언하는 걸 객체 리터럴이라고 하고, 클래스가 생산한 객체를 인스턴스라고 구분해서 부르는 거다.
- 단축 평가 and: and 연산을 실행할 때, 자바스크립트 기준, 왼쪽부터 T/F를 평가하면서 제일 먼저 발견되는 falsy한 값을 반환한다. falsy가 없으면 마지막 값을 반환한다. 0, null, None 등은 falsy로 간주되는 값이기 때문에 바로 반환되지만 1, 2, 3 같은 것은 falsy하지 않으므로 마지막 값이 반환되는 거임.
- 요점은 순서대로 연산을 하다가 처음으로 false가 확정되는 순간 break하고 바로 false를 반환한다는 거임
- 단축 평가 or: or 연산을 실행할 때 처음으로 truthy한 값이 나오면 바로 반환하되, 그런 게 없으면 마지막 값을 반환.
- and와 or의 특성상 T/F만 반대이다 뿐이지 결과가 확정될 때까지만 연산하는 건 마찬가지임.
- 조건문: if를 줄줄이 연쇄하는 것보다는 if에서 바로 return하는 걸 여러 번 쓰는 걸 선호한다.
코딩하기
어떤 웹 서비스에서 사용자의 기본 정보를 저장하려고 합니다.
아래 정보를 저장합니다. 적절한 자료형과 변수명을 생각합니다. 변수로 선언한 후, 예시 값을 대입하세요.
| 저장할 정보 | 설명 | 예시 값 |
|---|---|---|
| 사용자 이름 | 문자로 저장되는 이름 | “김자바” |
| 나이 | 정수로 저장되는 나이 | 29 |
| 로그인 여부 | 로그인한 상태인지 아닌지 | true |
| 회원 ID | 아주 큰 정수 값으로 저장됨 | 202406131234L |
| 평점 | 소수점 포함 점수 | 4.8 |
| 휴대폰 번호 | 아직 입력하지 않음 → 빈 값(null) | null |
| 관심 있는 태그 목록 | 사용자가 선택한 태그 3개 | “코딩”, “자바”, “웹개발” |
1
2
3
4
5
6
7
8
9
10
11
public class DAY1_1 {
public static void main(String[] args) {
String name = "Kim Ja Va";
int age = 29;
Boolean is_login = true;
long id = 202406131234L;
double score = 4.8;
String phone = null;
String[] tags = {"Coding", "Java", "Web Development"};
}
}
간단한 영화 예매 시스템을 개발하고 있다. 필요한 정보들을 변수, 배열, 형변환, 상수를 활용하여 구현하시오.
요구사항
- 예매 가능한 영화는 3편이며, 각각의 제목을 문자열 배열에 저장한다.
- 영화 가격은 모두 동일하며, 상수로 선언하여 1장당 12,000원으로 저장한다.
- 사용자가 선택한 영화는 “어벤져스”, “인사이드 아웃”, “라라랜드” 순으로 각각 1장, 2장, 3장을 예매했다고 가정한다.
- 입력값은 문자열(String)로 주어지며, 이를 정수로 변환하여 계산한다.
- 총 결제 금액을 출력한다.
예제 출력
1
2
3
4
5
영화: 어벤져스, 예매 수: 1, 금액: 12000원
영화: 인사이드 아웃, 예매 수: 2, 금액: 24000원
영화: 라라랜드, 예매 수: 3, 금액: 36000원
총 결제 금액: 72000원
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class DAY1_2 {
public static void main(String[] args) {
// 영화 제목 배열
String[] movies = {"어벤져스", "인사이드 아웃", "라라랜드"};
// 영화 가격 상수
final int MOVIE_PRICE = 12_000;
int tickets[] = {1, 2, 3}; // 예매한 티켓 수
int totalAmount = 0; // 총 결제 금액
// 각 영화에 대한 결제 금액 계산 및 출력
for (int i = 0; i < movies.length; i++) {
int amount = tickets[i] * MOVIE_PRICE; // 각 영화의 결제 금액 계산
totalAmount += amount; // 총 결제 금액 누적
System.out.println(String.format("영화: %s, 예매 수: %d, 금액: %d원", movies[i], tickets[i], amount));
}
// 총 결제 금액 출력
System.out.println("\n총 결제 금액: " + totalAmount + "원");
}
}
교재 답안
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
public class Solution {
public static void main(String[] args) {
// 상수 선언: 영화 한 장 가격은 고정된 값이므로 final 사용
final int PRICE_PER_TICKET = 12000;
// 배열: 영화 제목들을 배열에 저장
String[] movieTitles = { "어벤져스", "인사이드 아웃", "라라랜드" };
// 배열 + 문자열 자료형: 예매 수량을 문자열로 저장
String[] ticketCounts = { "1", "2", "3" };
// 형변환: 문자열을 정수로 변환 (String → int)
int count1 = Integer.parseInt(ticketCounts[0]);
int count2 = Integer.parseInt(ticketCounts[1]);
int count3 = Integer.parseInt(ticketCounts[2]);
// 계산: 예매 수량 × 가격 → 영화별 금액 계산
int total1 = count1 * PRICE_PER_TICKET;
int total2 = count2 * PRICE_PER_TICKET;
int total3 = count3 * PRICE_PER_TICKET;
int grandTotal = total1 + total2 + total3; // 전체 금액 계산: 영화별 금액 합산
// 출력: 각 엉화 청보 출력
System.out.println("영화: " + movieTitles[0] + ", 예매 수: " + count1 + ", 금액: "+ total1 +"원");
System.out.println("영화: " + movieTitles[1] + ", 예매 수: " + count2 +", 금액: " + total2 + "원");
System.out.println("영화: " + movieTitles[2] + ", 예매 수: " + count3 + ", 금액: " + total3 + "원");
System.out.println(); // 줄 바꿈
System.out.println("총 결제 금액: " + grandTotal + "원"); // 총 결제 금액 줄력
}
}
여행지를 선택하고, 나이와 회원 여부에 따라 추천 혜택을 받는다.
여행지 이름과 예약 수량, 회원 여부와 나이가 다음과 같이 저장되어 있다.
1
2
3
4
String[] destinations = { "제주도", "강름", "부산" };
String[] bookingCounts = { "2", "0", "1" };
boolean isMember = true;
int age = 25;
요구사항
- 각 여행지의 예약 현황을 출력한다. (예약 수량은 정수로 변환하여 활용)
- 1인당 여행 비용은 100,000원으로 고정되어 있다.
- 전체 여행 예약 수가 3건 이상이고, 회원이며, 나이가 20세 이상이면 “여행 추천 혜택 대상” 출력, 아니라면 “일반 고객” 출력
출력 결과
1
2
3
4
5
6
7
[예약 현황]
제주도: 2건
강증: 0건
부산: 1건
총 금액: 300000원
여행 추천 혜택 대상
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
public class DAY1_3 {
public static void main(String[] args) {
String[] destinations = { "제주도", "강릉", "부산" };
String[] bookingCounts = { "2", "0", "1" };
boolean isMember = true;
int age = 25;
System.out.println("[예약 현황]");
int totalBookings = 0;
for (int i = 0; i < destinations.length; i++) {
int bookings = Integer.parseInt(bookingCounts[i]);
totalBookings += bookings;
System.out.println(destinations[i] + ": " + bookings + "건");
}
int totalCost = totalBookings * 100000;
System.out.println("\n총 금액: " + totalCost + "원");
if (totalBookings >= 3 && isMember && age >= 20) {
System.out.println("여행 추천 혜택 대상");
} else {
System.out.println("일반 고객");
}
}
}
단축 평가 이해하기
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 DAY1_4 {
public static void main(String[] args) {
int a = 10;
if (a < 5 && a++ > 1) {
System.out.println("A");
}
else {
System.out.println("B");
}
System.out.println(a);
int b = 10;
if (b > 5 || ++b > 1) {
System.out.println("A");
}
else {
System.out.println("B");
}
System.out.println(b);
}
}
1
2
3
4
B
10
A
10
아래의 요구사항을 보고 자바 클래스의 변수를 선언해보자
- 공장의 고유 식별 번호 (매우 큰 숫자)
- 공장 명칭 (한글/영문 혼용)
- 현재 공정 온도 (소수점 발생 가능, 센서 오류 시 데이터 비어있음)
- 오늘 생산된 제품 총 개수 (최대 100만 개)
- 현재 라인 가동 여부 (ON/OFF)
- 최근 점검 일자 (날짜와 시간 포함)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.time.LocalDateTime;
public class DAY1_5 {
public static void main(String[] args) {
// 공장의 고유 식별 번호 (매우 큰 숫자)
long factoryId = 123456789012345L;
// 공장 명칭 (한글/영문 혼용)
String factoryName = "서울공장 Seoul Factory";
// 현재 공정 온도 (소수점 발생 가능, 센서 오류 시 데이터 비어있음)
Double currentTemperature = 75.5; // 센서 오류 시 null로 설정 가능
// 오늘 생산된 제품 총 개수 (최대 100만 개)
int totalProductsProduced = 500000;
// 현재 라인 가동 여부 (ON/OFF)
boolean isLineOperating = true; // ON: true, OFF: false
// 최근 점검 일자 (날짜와 시간 포함)
LocalDateTime lastInspectionDate = LocalDateTime.parse("2024-06-01T14:30:00"); // ISO 8601 형식
}
}
컨베이어 벨트 이상 감지 시스템 구축
10개의 제품이 컨베이어 벨트를 지나갑니다.
각 제품의 무게는 100, 102, 95, 110, 88, 105, 101, 99, 103, 100입니다.
조건 1:무게가 90 미만이거나 110 초과면 “불량품 발생” 메시지를 출력하세요.
조건 2:불량품이 3개 이상 나오면 “라인 즉시 정지”를 출력하고 반복문을 탈출하세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class DAY1_6 {
public static void main(String[] args) {
int[] weights = {100, 102, 95, 110, 88, 105, 101, 99, 103, 100};
int defectiveCount = 0;
for (int weight : weights) {
if (weight < 90 || weight > 110) {
System.out.println("불량품 발생: " + weight + "kg");
defectiveCount++;
}
if (defectiveCount >= 3) {
System.out.println("라인 즉시 정지");
break;
}
}
}
}
기본 입출력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.Scanner;
public class DAY1_7 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = "";
while (!input.equals("1234")) {
System.out.print("비밀번호를 입력하세요: ");
input = sc.nextLine();
}
System.out.println("접속 성공!");
sc.close();
}
}
문제
- 여러 개의 여행지가 있고, 각각은 계절 정보를 포함합니다.
- 사용자에게 계절을 입력 받아, 해당 계절에 맞는 여행지를 추천해주는 프로그램을 작성하세요.
- 여행지 목록과 계절 정보는 인덱스로 연결되어 있음
- places[0] = 제주도, seasons[0] = 여름 -> 제주도는 여름에 추천
1
2
const places = ["제주도", "강릉", "부산", "설악산", "여수"];
const seasons = ["여름", "겨울","여름","가을", "봄"];
- 일치하는 여행지가 없다면 “해당 계절의 추천 여행지가 없습니다.” 출력
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
import java.util.Scanner;
public class DAY1_8 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] places = {"제주도", "강릉", "부산", "설악산", "여수"};
String[] seasons = {"여름", "겨울", "여름", "가을", "봄"};
System.out.print("계절을 입력하세요: ");
String inputSeason = sc.nextLine();
boolean found = false;
for (int i = 0; i < seasons.length; i++) {
if (seasons[i].equals(inputSeason)) {
System.out.println(places[i] + "는 " + inputSeason + "에 추천되는 여행지입니다.");
found = true;
}
}
if (!found) {
System.out.println("해당 계절의 추천 여행지가 없습니다.");
}
sc.close();
}
}