공부의 기록/자바 풀 스택 : 수업내용정리

자바 풀 스택 12/23 오전 기록 023-1

파티피플지선 2024. 12. 23. 13:16

9:15경 학원 도착
 
 
 
 
<9:30 1교시>
git restore .   
변경 사항이 저절로 사라짐 ->대신 이건 복구가 안됨,
단, 추적된 파일에 대한 변경 사항만 가능 untracked file에 대한 변경 사항은 변경하지 못한다.

untracked file 까지 지워주려면 
git clean -fd
명령어를 사용해야 한다. untracked 상태인 file 과 directory까지 다 지워버리겠다는 얘기

 
git reset의 강도 (git reset --어쩌구 HEAD~)
1. soft : commit 내용만을 취소하고 add . 된 상태로 복귀. commit message 수정이나 add . 이 아닌 다른 add로 commit 한 경우

2. mixed : commit 과 add가 취소되고, 변경 상황 자체는 남아있음. 디폴트 값이어서 --mixed 만 빼도 됨.

 
3. hard : commit, add, 변경 내용이 모두 취소되어 이전 커밋 상태로 워킹 트리가 클린한 상태로 리셋됨.
 
 
git reflog를 사용한다면 HEAD의 이동 이력을 볼 수 있다.

 
 
origi_HEAD : 원래 head가 있던 곳으로 되돌리겠다.
 
git reset --hard HEAD@{1}          바로 이전 커밋으로 되돌리기
git reflog                                       HEAD의 이동 이력을 볼 수 있다.
git reset --hard HEAD~                HEAD가 한칸 더 이전 걸로 감
git reset --hard ORIG_HEAD      바로 이전 HEAD가 있던 곳으로 감
 

initialize repository : git init 의 역할을 해줌

 

+기호 눌러서 add, 제목 붙이고 commit. master 브랜치 아니고 main 브랜치라고 이름이 붙여짐.
 
terminal 이용해서도 git 을 활용할 수 있음

 
 

git stash -u   :untracked file까지 임시저장하겠다
 
 
<10:30 2교시>
임시저장한 stash 파일을 불러오는 과정들 보기

 

 
 
ArrayList<데이터 타입의 generic 지정>
데이터 타입의 generic을 Object라고 지정하면 아무거나 다 담길 수 있다.
그리고 ArrayList의 특성 상 입력한 순서대로 알아서 들어간다.
Consumer는 메소드 1개 짜리 인터페이스인데, ArrayList의 데이터 타입을 따라
이것을 구현하여 매개변수에 저장된 arraylist의 아이템을 자동으로 호출하는 방법.

foreach라는 메소드를 호출하면서 동작(메소드)하나를 객체에 포장해서 전달하는 것
 
메소드 하나짜리 인터페이스는 함수 형태로 쓸 수 있다. 그래서
Consumer<String> con = (t)->{};
greets.forEach(con);
또는 
greets.forEach((t)->{System.out.println(t);});
라고 함수를 변수에 담은 모양으로 쓸수도 있는 것이다.

package test.main;

import java.util.ArrayList;
import java.util.function.Consumer;

public class MainClass03 {
	public static void main(String[] args) {
		//인사말을 담을 ArrayList 객체를 생성해서 참조값을  greets 라는 지역변수에 대입하기 
		ArrayList<String> greets = new ArrayList<>();
		//greets 에 들어 있는 참조값을 이용해서 인사말 3개를 임의로 담아보세요
		greets.add("hello");
		greets.add("hi");
		greets.add("good night");
		
		//확장 for 문을 이용해서 모든 인사말을 콘솔창에 순서대로 출력해 보세요.
		for(String tmp : greets) {
			System.out.println(tmp);
		}
		
		System.out.println("--- ---");
		
		//아래의 동작을 분석해 보세요
		Consumer<String> con = new Consumer<String>() {
			@Override
			public void accept(String t) {
				// 매개 변수에 전달되는 item 을 가지고 어떤 작업을 할지 여기에 coding 을 하면 된다. 
				System.out.println(t);
			}
		};
		/*
		 *  ArrayList 객체의 forEach() 메소드를 호출하면서 Consumer type 객체를 전달하면
		 *  전달된 객체의 accept() 메소드를 호출하면서 
		 *  ArrayList 객체에 저장된 item 을 순서대로 매개 변수에 전달해 준다. 
		 */
		greets.forEach(con);
		
		System.out.println("-----");
		
		Consumer<String> con2 = (t)->{
			System.out.println(t);
		};
		
		greets.forEach(con2);
		
		System.out.println("-----");
		
		greets.forEach((t)->{
			System.out.println(t);
		});
		
	}
}

 
 
예제
2번까지도 헤매느라 간신히 했고 나머지 다 못풀었뜨아아아ㅏㅏㅏㅏㅏㅏㅏㅏ아앍!!!
정신차리고 공부해!!!

//1. Car type을 저장할 수 있는 ArrayList 객체를 생성해서 참조값을 arrayList 인터페이스 type 지역 변수 cars에 담기

//2. Car 객체(3개)를 생성해서 ArrayList 객체에 저장하기

//3. 일반 for 문을 이용해서 array List 객체에 저장된 모든 Car 객체의 drive()메소드를 순서대로 호출하기

//4. 확장 for 문을 이용해서 array list 객체에 저장된 모든 car 객체의 drive 메소드를 순서대로 호출하기
//5. arraylist 객체의 forEach()메소드를 이용해서 arraylist 객체에 저장된 모든 car 객체의 drive()메소드를 순서대로 호출하기
 
예제 답

더보기
package test.main;

import java.util.ArrayList;

import test.mypac.Car;

public class MainClass04 {
	public static void main(String[] args) {
		//1. Car type을 저장할 수 있는 ArrayList 객체를 생성해서
		//참조값을 arrayList 인터페이스 type 지역 변수 cars에 담기
		ArrayList<Car> cars = new ArrayList<>(); 
		
		
		//2. Car 객체(3개)를 생성해서 ArrayList 객체에 저장하기
		
		Car car1 = new Car("기아");
		Car car2 = new Car("벤츠");
		cars.add(car1);
		cars.add(car2);
		cars.add(new Car("현대"));
		
		
		//3. 일반 for 문을 이용해서 array List 객체에 저장된 모든 Car 객체의 drive()메소드를 순서대로 호출하기
		for (int i=0; i<cars.size(); i++) {
			Car tmp= cars.get(i);
			tmp.drive();
		}
		
		//4. 확장 for 문을 이용해서 array list 객체에 저장된 모든 car 객체의 drive 메소드를 순서대로 호출하기
		for(Car tmp:cars) {
			tmp.drive();
		}
			
		//5. arraylist 객체의 forEach()메소드를 이용해서 arraylist 객체에 저장된 모든 car 객체의 drive()메소드를 순서대로 호출하기
		cars.forEach((tmp->{tmp.drive();}));
		
	}
	

	
}

 
 
<11:30 3교시>


 
 
2교시 때 예제 처참하게 못하고 3교시때는 따라해서 어찌어찌 했는데
혼자 어케하냐 ㅋㅋㅋㅋ ㅠ 공부해!

 

package test.main;


import java.util.ArrayList;
import java.util.List;

import test.mypac.Member;//패키지명 잘 보고 import 하기

public class MainClass05 {
	public static void main(String[] args) {
		//1. member 객체를 담을수있는 어레이리스트 객체를 생성해서 참조값을 members 라는 List type 지역변수에 담아 보세요.
		List<Member> members = new ArrayList<Member>();
		//2.3명의 회원정보를 멤버 객체에 각각 담으세요(멤버 객체 3개가 생성)
		Member mem1 = new Member(1, "하나", "서울");
		Member mem2 = new Member(2, "두리", "경기");
		Member mem3 = new Member(3, "사미", "부산");
			
		//3. 위 멤버 객체의 참조값을 List 객체에 모두 담기
		members.add(mem1);
		members.add(mem2);
		members.add(mem3);
		/*
		 * 4. members 리스트 객체에 담긴 애용을 이용해서 회원 목록을 아래와 같은 형식으로 반복문을 돌면서 출력하기
		 * 번호: 1, 이름: 김구라, 주소: 노량진
		 * 번호: 2, 이름:해골, 주소 : 행신동
		 *  
		 */
		members.forEach((tmp)->{System.out.println("번호: "+tmp.num + ",  이름:" + tmp.name + ",  주소: "+ tmp.addr);});
		
		/*
		 * for (Member tmp:members){
		 *	//String 클래스의 format()이라는 static 메소드를 이용해서 원하는 문자열 형식을 만든 다음
		 * 	String info = String.format("번호:%d, 이름:%s, 주소: %s", tmp.num, tmp.name,tmp.addr);
		 *	//콘솔창에 출력하기
		 *  System.out.println(info);
		 * }
		 */
			
			
			
	}
}

 
 
 
 
또다른 예제 

package test.main;

import java.util.ArrayList;

import test.mypac.MemberDto;

public class MainClass06 {
	public static void main(String[] args) {
		//1. MemberDto 객체를 담을 수 있는 어레이리스트 객체를 생성해서 참조값을 members라는 지역변수에 담기
			ArrayList<MemberDto> members = new ArrayList<>();
		
		//2. 3명의 회원정보를 memberDto 객체에 각각 담기(memberdto 객체가 3개 필요)
			MemberDto m1 = new MemberDto(1, "하나", "서울");
			MemberDto m2 = new MemberDto(2, "두리", "경기");
			MemberDto m3 = new MemberDto(3, "사미", "부산");
			
			
		//3. 위에서 생성된 memberDto 객체의 참조값을 arraylist객체에 모두 담기
			members.add(m1);
			members.add(m2);
			members.add(m3);
			
			
		//4. 반복문을 이용해서 members에 들어있는 회원정보 출력하기
		
			for (MemberDto tmp: members) {
				String info = String.format("번호:%d, 이름:%s, 주소:%s", tmp.getNum(), tmp.getName(), tmp.getAddr());
				System.out.println(info);
			}
			
	}
}

 
 
 
<12:30 4교시>
 
3교시 마지막에 한 예제 답 + Object...이나 String...의 의미(전달할 매개변수 개수를 유동적으로 하겠다는 의미)

package test.main;

import java.util.ArrayList;

import test.mypac.MemberDto;

public class MainClass06 {
	public static void main(String[] args) {
		//1. MemberDto 객체를 담을 수 있는 어레이리스트 객체를 생성해서 참조값을 members라는 지역변수에 담기
			ArrayList<MemberDto> members = new ArrayList<>();
		
		//2. 3명의 회원정보를 memberDto 객체에 각각 담기(memberdto 객체가 3개 필요)
			MemberDto m1 = new MemberDto(1, "하나", "서울");
			MemberDto m2 = new MemberDto(2, "두리", "경기");
			MemberDto m3 = new MemberDto(3, "사미", "부산");
			
			
		//3. 위에서 생성된 memberDto 객체의 참조값을 arraylist객체에 모두 담기
			members.add(m1);
			members.add(m2);
			members.add(m3);
			
			
		//4. 반복문을 이용해서 members에 들어있는 회원정보 출력하기
		
			for (MemberDto tmp: members) {
				String info = String.format("번호:%d, 이름:%s, 주소:%s", tmp.getNum(), tmp.getName(), tmp.getAddr());
				System.out.println(info);
			}
			
		//테스트 메소드 호출 : 매개변수에 전달할 스트링 타입의 개수가 유동적이다.
			test();
			test("kim");
			test("kim", "lee", "park")
			
	}
	//테스트
	public static void test(String... msgs) {
		//String...은 String[]type이다
		String[] a=msgs; 
	}
	
}