20일차 내용 정리

채공부·2025년 6월 20일

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

접근지정자

private

  • 외부에서 접근 불가
  • 동일 객체(클래스) 내부에서만 접근 가능

✏️ 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 & Getter

Setter

  • 값을 저장할 떄 : setter()
public void setNum(int num){
	this.num = num;
}

Getter

  • 값을 가져올 때 : getter()
public int getNum(){
	return num;
}

💠 setter & getter 자동 생성 방법

  1. 필드 선언하고 클래스 안에서 마우스 우클릭 후 Source → Generate Getters and Setters


2. Select All → Generate

생성자

  • 클래스명과 동일하며 리턴 타입이 없다
  • new 키워드로 객체를 생성할 때 자동으로 호출
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;
}

예제 CODE

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("압구정");
	}
}

Array

🟡 배열 선언과 초기화

배열에_저장된_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;
  • MemberInfo 객체는 총 3개 생성 → m1, m2, m3
    MemberInfo[ ] 배열 객체는 총 3개 생성 → members, members2, members3

🟡 배열 요소의 타입 분석

표현식타입
membersMemberInfo[ ] type
members[0]MemberInfo type
members[0].numint type

💠 생성자 자동 생성

  1. 필드 선언하고 클래스 안에서 마우스 우클릭 후 Source → Generate Constructor using Fields

  1. Select All → Generate

🟡 객체 배열 생성과 요소 접근

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(); // 이태원		
	}
}

Random

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()

  1. nextInt()
  • int 전체 범위 내에서 랜덤 정수 반환
  1. nextInt(int bound)
  • 0 이상 bound 미만의 정수를 반환
  1. nextInt(int origin, int bound)
  • 범위 지정이 가능한 nextInt
  • origin 이상 bound 미만
profile
학원 공부 내용 정리

0개의 댓글