18일차 내용 정리

채공부·2025년 6월 18일

Git

VS Code에서 명령 프롬프트 열기
위치 : 상단 메뉴 ➜ Terminal ➜ New Terminal
∴ 하단에 터미널 창이 뜬다

기본 명령어

dir : 현재 폴더의 파일 목록 보기
cd 폴더명 : 해당 폴더로 이동
cls : 화면 청소

저장소 목록 확인

git remote -v

➜ v (verbose) : 나열해라

HEAD

HEAD -> master, origin/master
  • HEAD : 현재 커밋의 위치 (cursor의 개념)
  • master, origin/master : branch pointer
  • origin/master : GitHub에 있는 master 브랜치의 최신 상태

HEAD 이동

<원격 브랜치로 이동>
git swtich origin/master : HEAD를 origin/master(다른 브랜치)로 옮기기

<HEAD만 이전 커밋으로 이동>
git checkout HEAD~ : HEAD만 한칸 뒤로 옮기기

<HEAD와 브랜치를 동시에 이전 커밋으로 이동>
git reset HEAD~ : HEAD와 master 브랜치를 같이 밑으로 옮기기

Git 실습

  1. 폴더 생성과 파일 추가
    test08 폴더 생성 후 해당 폴더 안에 index.html 추가
    h 요소 추가 후 터미널 실행
cd test08 : 폴더 이동
git init : 초기화
  1. 기본 흐름
git status : 상태 확인
git add . : 파일 스테이징
git commit -m "index.html added" : 커밋

<p요소 추가 >
git add .
git commit -m "p1 added"
  1. HEAD 이동 흐름

① HEAD만 이전 상태로

git checkout HEAD~ ➝ p1이 사라짐
 ↳ HEAD가 가리키고 있는 커밋의 상태로 워킹트리가 변화  
git checkout master : 현재 브랜치로 복귀 ➝ p1이 다시 생김

② HEAD와 브랜치를 함께 완전 이전 상태로

git reset --hard HEAD~ : 기록을 되돌린다 ➝ p1이 사라짐  
  1. 커밋 history 확인
git reflog : HEAD가 어떻게 이동했는지 이력을 보여준다
<예시>
  
PS C:\playground\git_test\test08> git reflog
23bd369 (HEAD -> master) HEAD@{0}: reset: moving to HEAD~
5993850 HEAD@{1}: checkout: moving from HEAD~ to master
5993850 HEAD@{2}: commit: p1 added
  1. 이전 상태로 복구
git reset --hard HEAD@{1} ➝ p1이 다시 생김
           or
git reset --hard 커밋_id ➝ p1이 다시 생김
  
커밋 id는 reflog의 맨앞 7자리로 표시
  1. 원격 저장소 연결

① GitHub에서 새 저장소(test08) 생성
② 원격 연결

git remote add origin 저장소_위치
git remote -v : 등록 확인
  
(git remote add : 원격저장소를 추가
origin : 원격 저장소의 이름 지정)

🔺 원격 연결 삭제

git remote remove origin : 원격 연결 삭제

③ 원격 저장소로 push

git push origin master
  
➝ GitHub에 master 브랜치 업로드
➝ HEAD⭢master, origin/master 연결

  1. 원격 브랜치로 이동 및 병합

① 원격 브랜치 보기

git checkout origin/master ➝ local repo 기능을 사용 가능

② 병합

  • 여러 작업이 동시에 이루어지면 브랜치가 갈라지고, 이후 master와 origin/master를 병합하면 merge commit이 발생
  • 두 브랜치에서 같은 파일의 같은 부분을 수정했다면 충돌 발생 해결 후 수정사항을 add, commit 해야 병합 성공
git merge origin/master

➝ 깃허브에 있는걸 제대로 쓰려면 fetch와 merge까지 완료해야 한다

③ push

  • local의 master 브랜치가 GItHub의 origin/master로 올라간다
  • 결과적으로 HEAD -> master, origin/master가 같은 커밋을 가리키게 된다
git push

🔺 한 번에 가져오기

git pull : fetch와 merge 한 번에 해결

Eclipse

Git clone 및 project import

clone

Git 저장소 위치 복사
git_repos로 이동하여 bash 실행
git clone 복사한_주소 ➝ 해당 저장소 폴더가 생성

cd 폴더명 몇글자 적고 TAB하면 자동 완성 사용 ➝ 해당 폴더로 이동

clone만 했기에 원격 저장소는 연결되었지만 아직 local에 반영한 상태는 아니다

ls ➝ 3개의 프로젝트가 있는 걸 확인

import

  1. 다른Com/java_work로 Switch Workspace

  2. git mode click ➝ Add an existing local Git repository click

  3. browse로 import할 폴더 찾아 click ➝ check 후 Add

  4. 확인하기

  5. 워킹트리에서 import 하고 싶은 Project를 찾아 마우스 우클릭
    ➝ Import Projects click

  6. 해당 Folder에 체크박스 check 후 Finish click

  7. 새로고침하면 import한 폴더에 .classpath와 . project 생성
    ➝ eclipes가 자동 생성

JAVA

공부 환경 만들기

Project : Step03_Class
Package : test.main
Class : MainClass01

Data Type

기본 data type

  • stack에 직접 값 저장
  • ⑴ byte
    ⑵ int
    ⑶ short
    ⑷ long
    ⑸ float
    ⑹ double
    ⑺ boolean
    ⑻ char

참조형 data type

  • heap에 객체 생성 ➝ 변수에 참조값(id) 저장
  • ⑴ String
    ⑵ PrintStream

예시

int num = 10;
String name = "kim"
  • 저장소 = Field
  • 기능 = method

랜덤한 숫자 생성

Random ran = null;
ran = new Random();
  
ran.nextBoolean(); : true, false 중에 아무거나 하나
ran.nextDouble(); : 실수 중에 아무간 하나
ran.nextInt(); : 정수 중에 이무거나 하나
  
java에서 null = 참조 데이터 type이 담길 수 있는 빈공간
int num = null; -> 불가능

파일 생성

File f = new File("경로/memo.txt");
f.createFile(); : 파일 생성

콘솔 입력

Scanner scan = new Scanner(System.in);
String line = scan.nextLine();
System.out.println("main 메소드가 종로 됩니다.");

Class

  • 객체를 생성할 수 있는 설계도
  • 해당 클래스로 객체를 생성하고 그 참조값을 변수에 저장
  • 클래스 이름 = data type 가능
    ➝ File, Random, Scanner 등은 클래스 이름이자 data type으로 사용

Class 의 역할

1. 객체의 설계도 역할

  • 필드 + 기능

  • 모든 함수가 객체 안에서 존재, 단독으로는 불가

  • 객체는 heap 영역(사물함)에 들어 있는 물건이라고 생각하면 된다

  • class를 이용해서 객체를 원하는 시점에 원하는 갯수 만큼 만들어 낼 수 있다

예제

같은 폴더에서 test.auto라는 package 생성 후
  
<Car Class 생성>
public class Car {
	// 달리는 기능(method) 만들기
	public void drive() {
		System.out.println("달려요!");
	}
}

<test.main package에서 MainClass02 class 생성>
package test.main;

import test.auto.Car;

public class MainClass02 {
	public static void main(String[] args) {
		// Car type 객체의 참조값(id)을 담을 수 있는 c1 이라는 이름의 비어 있는 변수 생성
		Car c1 = null; // 동일한 package에 존재한다면 import 필요 X
		// Car 클래스로 객체를 생성하고 할당된 참조값을 c1에 대입하기
		c1 = new Car();
		// c1에 들어있는 참조값을 이용해서 drive() 메소드 호출하기
		c1.drive();
	}
}

2. Data type으로 사용

public class Car {
	public String name; // 참조 데이터 type 의 기본값 :null
	public int price;   // 기본 데이터 type 의 기본값 : 0
}

this

public void drive(){
	System.out.println(this.name+"이(가) 달려요!");
  • 해당 객체 자신의 heap 공간 참조
  • 클래스 설계하는 시점에 this는 값은 정해지지 않는다
  • 각각의 필드는 객체 고유한 값을 가진다
  • 필드마다 값이 다르므로 객체마다 메소드 동작이 달라질 수 있다
profile
학원 공부 내용 정리

0개의 댓글