Git
복습 시작
🔴폴더 & 파일 생성
test10 폴더 생성 후 그 안에 index.html 파일 생성
Terminal 실행하여 cd test010로 이동
git init
git status : untrackted file 존재
git add .
git commit -m "index.html added"
🔴브랜치 작업
git branch : 브랜치 목록 확인 → 현재 master 브랜치만 존재
git branch lab1 : lab1 브랜치 생성
git switch lab1 : HEAD를 lab1으로 이동
🔴 작업 추가 후 상태 확인
ul, li, a 요소 추가 후
<ul>
<li><a href="study.html">study</a></li>
</ul>
git status
🔴 임시저장 (stash)
git stash : 변경사항 임시 저장하고 적용 → 현재 변경사항이 사라짐(ul,li, a 요소)
git status : 현재 워킹트리가 클린한 상태 확인
git stash list : 임시 저장한 목록 확인
git stash pop : 저장된 stash 목록 중 하나를 지우면서 적용
git stash list : 목록 확인하니 아무것도 없는 상태
🔴 파일 추가
study.html 파일 생성 후 해당 어떤 걸 작성 중이라고 가정
git status : modified 이랑 untracked 둘 다 존재
git stash : index.html 파일의 수정 사항은 사라졌지만 study.html은 그대로 존재
⤷ untracked file은 stash에 기본적으로 포함 X
git stash pop : 요소 다시 복구
🔴 Untracked file 까지 stash
git stash -u : untracked file도 포함해 stash 저장 → 새로 추가한 파일도 사라짐
git stash pop : untracked file도 함께 복원
git stash -u
git stash apply : stash 내용을 적용만 하고 목록은 유지
⤷ stash pop 은 적용과 동시에 목록 삭제시킨다는 차이점
git status : apply 목록에 그대로 남아 있음
git stash drop stash@{0} : 특정 stash 삭제
⤷ stash 식별자
git stash clear : 전체 stash 삭제
git add .
git commit -m "study"
git switch master : master 브랜치로 전환 → study 커밋이 없기에 없어짐
🔴 lab2 브랜치 작업
git branch lab2 : lab2 브랜치 생성
git switch lab2 : HEAD를 lab2으로 이동
index.html 파일에 ul, li, a 요소 추가
<ul>
<li><a href="game.html">game</a></li>
</ul>
git status : 수정 사항 존재 확인
🔴 수정사항 취소
git add . : 스테이징
⚠️ 만일 스테이징 한 상태에서 개발 취소하고 싶다면 싶다면❓
현재 head 가 가리키고 있는 상태로 reset이 가능하다.
git log : 현재 HEAD가 가리키고 있는 커밋 확인
git reset --hard HEAD : 현재 HEAD가 가리키고 있는 커밋 상태로 되돌리기 → 수정사항 사라짐
⤷ modified 파일은 복구되지만 untracked 파일은 그대로 남아 있다
⤷ 🚫되돌릴 수 없다🚫
🔴 reset & clean
game.html 파일 추가, index.html 수정
git status : modified + untracked 파일 둘 다 존재
git reset --hard HEAD ; index.html 수정사항 사라지고 game.html은 여전히 존재
git clean -fd : modified 와 untracked 모두 삭제 → game.html 파일 사라짐
⤷ 새로 추가한 파일이나 디렉토리만 싹 없애고 싶을 때 사용
⤷ 하지만 한 번 커밋의 대상이 된 파일들은 남아있다
🔴 reset & restore
index.html 파일에 공백 추가
공백 추가하고 git status 하면 변화 한다고 뜬다
git status : modified 상태로 확인
git reset --hard HEAD : 수정 전으로 되돌려짐
index.html 파일에 내용과 추가하고 공백 추가
git status : modified 상태로 확인
git restore . : 수정 전으로 되돌려짐
🔸reset 과 restore 의 차이점
restore : 워킹 디렉토리의 변경 사항만 되돌리고 git add 상태는 유지
reset : 워킹 디렉토리와 add 상태도 한 번에 되돌림
🔴 VS Code 상에서 Git
index.html 파일에 p 요소 추가 후 test10 폴더 열기
변경사항이 사이드 바에 표시
+ click → 해당 파일 스테이징 (add)
- click → 스에티징 취소 (add 취소)
커밋 메시지를 입력 후 커밋 버튼을 클릭하면 커밋 완료
Eclipes
✏️ MemberDto 클래스 생성
package test.mypac;
public class MemberDto {
private int num;
private String name;
private String addr;
}
🟡 외부에서 접근 불가
MemberDto dto = new MemberDto();
❌dto.num = 1❌ → error
🟡 접근하려면 setter/getter 메소드 사용
dto.setNum(1); → public 메소드를 통해 접근 가능
setter()public void setNum(int num){
this.num = num;
}
getter()public int getNum(){
return num;
}
💠 setter & getter 자동 생성 방법

2. Select All → Generate

public MemberDto(){
System.out.println("MemberDto 클래스와 생성자가 호출됨!");
}

public MemberDto(int num, String name, String addr){
this.num = num;
this.name = name;
this.addr = addr;
}
public MemberDto(int num){
this.num = num;
}
MemberDto.java
package test.mypac;
public class MemberDto {
private int num;
private String name;
private String addr;
public MemberDto() {
System.out.println("MemberDto 클래스와 생성자가 호출됨!");
}
public MemberDto(int num, String name, String addr) {
this.num = num;
this.name = name;
this.addr = addr;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
MainClass14.java
package test.main;
import test.mypac.MemberDto;
public class MainClass14 {
public static void main(String[] args) {
new MemberDto();
MemberDto dto = new MemberDto();
MemberDto dto2 = new MemberDto(1, "정준하", "서래마을");
MemberDto dto3 = new MemberDto();
dto3.setNum(2);
dto3.setName("유재석");
dto3.setAddr("압구정");
}
}
🟡 배열 선언과 초기화
배열에_저장된_data_type[] 배열명 = {데이터1, 데이터2, 데이터3,...};
int[] nums = {10,20,30,40,50};
String[] names = {"김구라", "해골", "원숭이", "주뎅이", "덩어리"};
⤷ 배열 안에 또 다른 객체의 참조값이 들어있을 수 있다
🟡 for문을 이용하여 배열 반복 출력
for(int i=0; i<names.length; i++) {
System.out.println(nums[i]);
}
🟡 배열 객체 생성 ➤ new 사용
배열에_저장된_data_type[] 배열명 = new 저장할_data_type[방의 갯수];
⤷ 생성자는 아니지만 생성자처럼 사용
int[] nums2 = new int[500];
🟡 여러 객체의 참조값을 하나의 배열에 담기
MemberInfo m1 = new MemberInfo();
m1.num = 1;
m1.name = "유재석";
m1.addr = "압구정";
MemberInfo m2 = new MemberInfo();
m2.num = 2;
m2.name = "박명수";
m2.addr = "이태원";
MemberInfo m3 = new MemberInfo();
m3.num = 3;
m3.name = "정준하";
m3.addr = "서래마을";
MemberInfo[] members = {m1, m2, m3};
// 아래와 같이 할 수도 있다
MemberInfo[] members2 = {null, null, null};
members2[0] = m1;
members2[1] = m2;
members2[2] = m3;
🟡 배열 요소의 타입 분석
| 표현식 | 타입 |
|---|---|
| members | MemberInfo[ ] type |
| members[0] | MemberInfo type |
| members[0].num | int type |
💠 생성자 자동 생성


🟡 객체 배열 생성과 요소 접근
MemberDto.java
package test.mypac;
public class MemberDto {
private int num;
private String name;
private String addr;
// default 생성자
public MemberDto() {
// num, name, addr 를 한 번에 전달 받는 생성자
}
public MemberDto(int num, String name, String addr) {
super();
this.num = num;
this.name = name;
this.addr = addr;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
MainClass06.java
import test.mypac.MemberDto;
public class MainClass06 {
public static void main(String[] args) {
MemberDto dto1 = new MemberDto();
dto1.setNum(1);
dto1.setName("유재석");
dto1.setAddr("압구정");
MemberDto dto2 = new MemberDto(2, "박명수", "이태원");
MemberDto dto3 = new MemberDto(3, "정준하", "서래마을");
// 배열에 담기
MemberDto[] members = {dto1, dto2, dto3};
// 배열을 다른 변수에 저장하거나 요소 꺼내기
MemberDto[] a = members;
MemberDto b = members[1];
// 배열 요소 내부 값 접근
int num = members[1].getNum(); // 2
String name = members[1].getName(); // 박명수
String addr = members[1].getAddr(); // 이태원
}
}
import java.util.Random;
public class MainClass07 {
public static void main(String[] args) {
// Random 객체 생성
Random ran = new Random();
// 0부터 5 미만 정수 랜덤값
int ranNum = ran.nextInt(5);
// 0 이상 10 미만 정수 랜덤값
int ranNum2 = ran.nextInt(10);
// 1 이상 10 이하 정수 랜덤값
int ranNum3 = ran.nextInt(10)+1;
System.out.println(ranNum);
}
}
🟡 배열과 함께 랜덤 사용
String[] data = {"🍒", "🍎", "🍌", "🍈", "7"};
Random ran = new Random();
int ranNum = ran.nextInt(data.length);
System.out.println(data[ranNum]);
🟡 nextInt()

nextInt()nextInt(int bound)nextInt(int origin, int bound)