Java Day8

YDC·2025년 6월 16일

우테코8기

목록 보기
8/23

Day7 복습

Local date란?LocalDate는 시간 정보 없이 "연-월-일"만 저장하는 클래스

Gson사용 중 LocalDate 사용시 저장하지 못해서 날짜는 이렇게 바꿔달라는 클래스 생성 필요

자바에서는 List와 ArrayList는 다르다!

OOP 원칙 위배

(구현에 의존하는 구조)메서드 인자는 가능한 한 무엇을 할 수 있느냐(List)에만 관심이 있어야 하고,어떻게 구현됐느냐(ArrayList)는 알 필요 없음 ArrayList에 의존하면, 내부 구조까지 강요하는 셈

오늘의 학습 계획

1.백준 3문제 풀기

  • 11382 꼬마 정민
  • 10171 고양이
  • 10172 개

2.git 스터디

  • git이 필요한 이유
  • 개인용 git 사용법
  • 협업용 Git 흐름 branch → PR 흐름 정리)
  • Todo 실습 (PR 흐름 + pull & rebase)
  • 커밋 충돌 및 해결 흐름 익히기
  • 현재 GitHub 레포지토리 리팩토링

3.기능확장

    1. 검색 기능 (Keyword Search)
  • 입력한 키워드가 포함된 할 일만 보여주기
  • 대소문자 구분 없이 검색

1.백준 3문제 풀기

1. 11382 꼬마 정민

문제
꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다!

입력
첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 1012승)이 공백을 사이에 두고 주어진다.

출력
A+B+C의 값을 출력한다.

예제 입력
77 77 7777

예제 출력
7931

풀이

package ioarithmetic;
import java.util.Scanner;

public class BOJ_11382_TripleSum {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        long a=sc.nextLong();
        long b=sc.nextLong();
        long c=sc.nextLong();
        System.out.println(a+b+c);
    }
}

첫번째 줄에 입력 3개가 들어오고 입력값이 10의 12승 이상 이다.

입력값이 정수를 받는 int의 범위를 넘기때문에 long을 사용해야함

long이란?

64비트(8바이트) 크기의 정수형 자료형
-2⁶³ ~ 2⁶³-1 범위의 정수를 저장할 수 있음

long을 사용했기때문에 Scanner도 nextLong사용

int의 범위와 long의 범위 차이를 아는지 물어보는 문제

2.10171 고양이

문제
아래 예제와 같이 고양이를 출력하시오.

예제출력

\    /\
 )  ( ')
(  /  )
 \(__)|

풀이

package ioarithmetic;

public class BOJ_10171_Cat {
    public static void main(String[] args) {
        System.out.println("\\    /\\");
        System.out.println(" )  ( ')");
        System.out.println("(  /  )");
        System.out.println(" \\(__)|");
    }

}

\를 표출하기 위해선 \를 사용해야하고 “를 사용하기위해선 \”를 사용해야한다 \의 표출 방법을 물어보는 문제

3.10172 개

문제
아래 예제와 같이 개를 출력하시오.

예제 출력

|\_/|
|q p|   /}
( 0 )"""\
|"^"`    |
||_/=\\__|

풀이

package ioarithmetic;

public class BOJ_10172_Dog {
    public static void main(String[] arg){
        System.out.println("|\\_/|");
        System.out.println("|q p|   /}");
        System.out.println("( 0 )\"\"\"\\");
        System.out.println("|\"^\"`    |");
        System.out.println("||_/=\\\\__|");
    }
}

\를 표출하기 위해선 \를 사용해야하고 “를 사용하기위해선 \”를 사용해야한다 \의 표출 방법을 물어보는 문제 고양이보다 더 복잡함

2.git 스터디

1.Git이 필요한 이유

git이란?

  • 코드 변경 이력 버전을 관리할 수 있게 해주는 도구
  • 변경사항을 commit하고, 필요하면 이전 상태로 되돌릴 수 있음

왜 코드 변경이력을 관리, 변경사항 commit, 이전 상태로 되돌리는게 중요한가

  1. 문제 생겼을 때 되돌리기 가능
  2. 작업 히스토리로 ‘누가’,’언제’,’왜’수정했는지 추적 가능
- git lof
  3. 작업 단위를 명확히 나눠서 기록 가능 
-feat 기능추가,fix 버그수정,refactor 리팩토링
  4. 충돌 방지와 협업의 핵심 도구
- 여러 사람이 같은 파일을 수정 할 수 있기 때문에 이력을 기준으로 충돌 해결 가능
- PR(Pull Request)과 커밋 로그는 팀원이 서로의 변경사항을 검토하고 리뷰하는 근거가 됨
  5. 배포 및 릴리즈 기준점이 됨
- 완성본의 시점을 체크하고 버전태그로 관리 가능 
- v1.0,v2.0 같은 릴리즈 포인트를 찍을 수 있음

브랜치란?

코드의 변경 이력을 독립적으로 실험하고 개발할 수 있게 해주는 분기점
지금까지의 커밋 이력을 그대로 복사한 후,그 위에서 자유롭게 실험하거나 개발할 수 있음

브랜치 = 기차 선로

main은 기본 선로 기능 하나 만들고 싶을 때, 새 선로(브랜치)를 만들고 그 위에서 작업
다 끝나면 다시 main에 합쳐(merge)
이러면 main 선로가 안전하게 유지되면서도,새로운 실험도 가능함

기능명령어설명
브랜치 목록 보기git branch현재 있는 브랜치들 확인
새 브랜치 생성git branch 기능A기능A 브랜치 만들기
브랜치 이동git checkout 기능A해당 브랜치로 이동
생성 + 이동 한 번에git checkout -b 기능A브랜치 생성 후 바로 이동
브랜치 병합git merge 기능A현재 브랜치에 기능A 내용을 병합
브랜치 삭제git branch -d 기능A병합 후 기능A 브랜치 삭제

git checkout -b feature/login→ 로그인 기능 개발

git add .
git commit -m "✨ 로그인 기능 구현 완료"

git checkout main
git merge feature/login→ main에 기능을 병합

리드미란? 프로젝트 소개서

README.md는 프로젝트의 첫인상이자 설명서


일반적인 구성 예시

# 프로젝트 이름

> 간단한 소개글

## 📁 폴더 구조
- `main.java`: 메인 코드
- `utils/`: 유틸리티 클래스 모음

## 🛠 사용 기술
- Java 17
- Git

## 🚀 실행 방법
```bash
javac Main.java
java Main

파일이름은 항상 파일 이름은 항상 `README.md 
.md`는 Markdown 문법 → 제목, 리스트, 코드 블록 등을 쉽게 쓸 수 있음

gitignore란?`.gitignore`는 Git이 추적하지 않아야 할 파일을 지정하는 목록

예를 들어:
- 컴파일된 파일 (`.class`)
- IDE 설정 파일 (`.idea/`, `.vscode/`)
- 민감한 정보 (`.env`)
- 임시 로그 파일 (`*.log`)

이렇게 설정하면 git add에 올라가지 않음 git add에 올라가면 ignore에 있어도 git hub에 올라감
처음에 ignore하는걸 잊어버리면 add가 추적하는걸 지워야지 github에 올라가지 않음 git rm --cache

커밋 메시지 형식

<타입>: <변경 내용 요약>

타입의미
feat새로운 기능 추가
fix버그 수정
docs문서 수정 (README 등)
style코드 포맷, 세미콜론 누락 등 기능에 영향 없는 변경
refactor코드 리팩토링 (기능 변화 없음, 구조 개선 목적)
test테스트 코드 추가/수정
chore기타 자잘한 작업 (빌드, 설정 파일 변경 등)
perf성능 개선
ciCI 관련 설정 변경 (예: GitHub Actions 설정 변경 등)
build빌드 시스템 또는 외부 의존성 변경 (예: Gradle, npm 패키지 추가)

2.개인용 git 사용법

  1. git 저장소 만들기
  • git init 현재 폴더를 git이 관리할 수 있는 상태로 만듬

  • git/폴더가 생기고 이안에 git이 사용하는 모든 정보가 들어가 있음
  1. git add 파일명 또는 .
  • git은 파일을 commit하기전 스테이징이라는 중간단계에 올려야 함
  • 어떤 파일을 옮길건지 파일명을 입력하거나 전체를 추가할 경우는 .을 입력함
  1. git commit -m 변경사항 기록
  • git 에서 변경이력을 남기는 핵심 행위
  1. git remote add origin 주소
  • github 원격 저장소 연결
  • origin이라는 이름으로 GitHub 저장소를 연결
  • 이후 push, pull 할 때 이 원격 저장소로 주고받게 됨
  1. git push origin main
  • main 브랜치에 있는 커밋들을 GitHub의 origin/main에 업로드함
  • github에 코드가 올라가서 백업 협업 공유가 가능해짐

3.협업용 git 흐름 (branch → PR 흐름 정리)

  1. main 브랜치에서 새 브런치 만들기
  • git checkout main main 브랜치로 이동
  • git pull origin main 최신 내용 먼저 가져오기
  • git checkout -b 브랜치 이름 새로운 브랜치 만들고 자동 변경
  1. 브랜치에서 작업 &커밋
  2. 원격 브랜치로 push
  • git push origin
  1. github에서 PR생성
    1. GitHub 접속
    2. Compare & pull request 클릭
    3. 제목, 설명 작성
    4. Create pull request
    5. 리뷰 받고, 확인되면 merge
  2. pr병합 (merge)
  • 승인되면 GitHub에서 Merge pull request 누르면 끝
  • 로컬에 병합 결과도 반영하려면
  • git checkout main
  • git pull origin main

4.Todo 실습 (PR 흐름 + pull & rebase)

Check out -n KeywordSearch생성 완료
작업 후 계속 예정

리뷰

매번 gpt한테 이모지랑 맞춤법 검사 해달라고했는데 그 작업이 너무 오래걸리고 오히려 내가 안쓴것같은 진정성이 떨어지는거 같아서 앞으론 내가 메모장에 적어놓은 내용을 그대로 쓸려고 합니다 ! 그래도 오늘도 고생했다! 나!

profile
초심자

0개의 댓글