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

자바 풀 스택 12/18 오전 기록 020-1

파티피플지선 2024. 12. 18. 13:17

9:10 경 학원 도착.

날이 춥기도 하고 늦잠도 잔 겸 겸사겸사 느즈막히 나왔는데 생각보다 편하게 와서 생각보다 좋다고 느끼는 중

일찍 왔으면 어제 상담한 내용 정리하려고 했는데, 5분밖에 없어서 대충 요약하자면 블로그에 내 생각이나 왜 그런 이유로 코딩 했는지 같은 것을 좀 더 많이 풀어써보라는 가이드 받은거, 정보처리기사 한 번 해보라는거

 

<9:30 1교시>

리눅스 명령어

ls : 디렉토리의 파일 이름만 나옴

cat 텍스트 파일 이름.확장자 : 텍스트 문서의  내용을 다 보여줌

git commit을 입력하면 vi(vim) editor가 열린다

아 이미지 설명 잘 못 적혓따 git command 아니고 git commit

 

vi 명령어와 변경을 하고자 하는 html 페이지의 이름을 입력하면 vi 에디터로 html을 편집할 수 있다 (댕신기)

근데 기능 자체는 직접 다 입력해야 해서 약간 귀찮긴 한데 더 프로그래머 같다.

vi editor에서 변경한 내용이 반영되어 있음 ㄷㄷ

 

 

블로그 글 쓰다가 놓친 부분들 걍 여기다 작성

git branch lab1 (master)

git checkout lab1   (master)     (cf. git checkout -b lab1은 git branch lab1과 git checkout lab1을 동시에 작성한 것.)

vi index.html  (lab1) 

i눌러서 html 내용 수정하기 (game.html을 만들어줌)

esc누르고 :wq입력해서 저장하고 빠져나오기(:q는 저장하지 않고 바로 빠져나오기)

(화면이 지저분하면 clear)

cat index.html         (작성한 텍스트 파일의 내용을 보여줌)

touch game.html (새로운 텍스트 파일을 만들어줌)

ls -al (디렉토리의 내용들을 보여줌)

vi game.html (lab1)

i 눌러서 game.html 내용 수정하고

esc 누르고 :wq 눌러서 저장하고 나오기

cat game.html 눌러서 제대로 작성했는지 확인해보기

git add . 

git commit -m "game.html added" (즉석에서 메시지 작성)

git checkout master (lab1) (체크아웃 할 때는 워킹 트리가 깨끗한지 확인하고 넘어가기)

(master 브랜치에 와 있는데 game.html이 사라져있음)

(master 브랜치를 수정함)

git add . 

git commit -m "p2 added" (이렇게 하면 수업 시간에 한 내용으로 봤을 때 동일한 위치에 서로 다른 내용이 있거든, 그래서 GIT이 보기에 merge 한다고 했을 때 정리가 안 돼서 충돌이 일어남 -> 이상한 기호는 전부 다 지우고 정말 원하는 코드만 남겨서 add commit 하면 됨)

git checkout lab1

git checkout master

git merge lab1 (master) (마스터에서 lab1으로 merge 하겠다 ->여기서 위에서 말한 충돌이 일어나는데 원하는것만 남기면 됨)

git add .

git commit -m "lab1 merged" (이러면 충돌 해결되고 merge도 됨)

git reset --hard HEAD~ (merge를 잘못했다 했을 때, HEAD를 한 칸 뒤로 물리면 Merge가 취소됨)

git reflog (스냅샷과 브랜치를 옮겨다닌 모든 역사가 있는데, git reset --hard 다음에 reflog에서 보이는 아이디를 타이핑하거나 HEAD@{1}, HEAD@{7}이런 기호를 타이핑하면 된다는데, 아마 이게 옆에 숫자가 HEAD~ 물결을 하는 횟수 써놓은거 같아서 그게 가능한듯)

 

 

 

 

 

<10:30 2교시>

Github에 저장하는 방법 local Git repository : init을 눌러서 워크스페이스를 찾으면 됨.

요즘엔 Master 브랜치 대신에 Main 브랜치라고 한다고 함

 

 

소스코드만 추적할 수 있게 해주는 gitignore 들을 모아놓은 사이트

.classpath와 .project도 같이 없애준다.

java에서 수정한 내용을 git 에 commit 하는 시점은 내 마음대로 해야 하지만, 브랜치를 체크아웃 할 때라면 add와 commit 한 상태에서 진행해야 한다.

 

 

어제 8교시에 예제로 나온 코드 다시 살펴봄

더보기
package test.main;

import test.mypac.Bike;

public class MainClass05 {
	public static void main(String[] args) {
		/*
		 * 1. Bike 객체를 담을 수 있는 방 3개짜리 배열객체를 생성해서 참조값을 bikes라는 지역변수에 담기
		 * 2. 배열의 각각의 방(0,1,2방) 에 Bike 객체를 생성해서 담기
		 * 3. 반복문 for를 이용해서 순서대로 배열의 각 방에 있는 Bike 객체의 ride()메소드를 호출하기
		 */
		//1.
		Bike[] bikes = new Bike[3];
		//2.
		for (int i=0; i<3; i++) {
			Bike b= new Bike();
			bikes[i]= b;
			//bikes[i].ride(); 이걸 여기다 쓰면 3번을 무시하고 2번의 문제를 담고 바로 호출하기 형태로 바뀐거
		
		}
		//3. 이런 작업을 할 일이 많다 ->줄여 쓰는 for문이 있다.
		for (int i=0; i<3; i++) {
			Bike tmp=bikes[i];
			tmp.ride();
		}
		//위의 for문을 줄여 쓴 확장 for문
		for(Bike tmp:bikes) {
			tmp.ride();
		}
				
		
	}
}

 

 

 

 

<11:30 3교시>

확장 for문
for(배열에 저장된 데이터 type   tmp : 배열[]){
}

 

변경된 내용 Git에 커밋하기

 

.gitignore 는 애초에 비어 있는 폴더를 인식하지 않고, 얘 때문에 새로 만든 project의 변경된 내용이 아무것도 인식되지 않는 상태인데, 앞으로 프로젝트하다 보면 빈 폴더가 필요할 때가 있다. 이럴 때는 빈 폴더에 아무 의미 없는 .gitignore를 걍 만들어 놓는다.

 

 

Extends 기능 살펴 보기

- Phone 클래스(Object를 상속받음)

더보기
package test.mypac;

//가상의 옛날 가정용 전화기 객체를 생성할 설계도 라고 가정
//어떤 클래스도 상속받지 않으면 java.lang의 Object 패키지의 내용을 자동으로 extends 상속받음 (extends Object는 생략 가능하다는 의미)
public class Phone extends Object {
	//생성자
	public Phone() {
		System.out.println("Phone 생성자 호출");
	}
	//전화 거는 메소드
	public void call() {
		System.out.println("전화를 걸어요");
	}
}

- MobilePhone 클래스(Phone과 Object를 상속 받음)

더보기
package test.mypac;

/*
 * 이미 존재하는 부모 클래스인 Phone 클래스를 extends(상속) 받아서 자식 클래스인 MobilePhone 클래스 정의하기
 * 확장해서 가져오는것을 상속이라고 부름
 * 부모의 기능을 모두 사용할 수 있을 뿐더러, 
 * 부모가 가진 메소드를 가져와서 내 상황에 맞게 재정의하여 수정할 수가 있음 -> 상속을 사용하는 주된 이유
 */
public class MobilePhone extends Phone {
	//생성자
	public MobilePhone() {
		System.out.println("MobilePhone 생성자 호출");
	}
	//이동중에 전화를 걸어요
	public void mobileCall() {
		System.out.println("이동중에 전화를 걸어요");
	}
	//사진 찍는 메소드
	public void takePicture() {
		System.out.println("30만 화소의 사진을 찍어요");
	}
	
}

상속의 확인

더보기
package test.main;

import test.mypac.MobilePhone;

public class MainClass01 {
	public static void main(String[] args) {
		/*
		 * Phone 클래스를 상속받은 MobilePhone 클래스로 객체를 생성해서 그 참조값을 p1이라는 이름의 지역변수에 담기
		 */
		MobilePhone p1 = new MobilePhone();
		//부모 클래스에 정의된 메소드도 사용 가능하다
		p1.call();
		p1.mobileCall();
		p1.takePicture();
	}
}

 

데이터 타입의 다형성

더보기
package test.main;

import test.mypac.MobilePhone;
import test.mypac.Phone;

/*
 * [다형성(type이 많은 성질)]
 * - java 에서 객체는 여러개의 type을 가질 수 있다.
 * - 참치 김밥은 김밥이기도 하다, 김밥은 음식이기도 하다
 * - 부모 타입으로 다형성을 활용할 때 유연성이 부여된다.
 * - 집에 들어올 때 음식 좀 사와랑 집에 들어올 때 참치김밥 사와랑 유연성이 다름
 * - 다만 부모 타입으로 받으면 자식 객체의 메소드를 쓸 수 없다
 *  *  지역변수나 필드앞에 선언하는 data type 은 (참조 데이터 type)
	 *  
	 *  그 안에 들어있는 참조값의 사용 설명서 라고 생각하면 된다.
	 *  
	 *  그렇기 때문에 그 지역변수나 필드에 . 을 찍으면 사용 설명서에 명시된 기능만 사용 할수 있다.
	 *  
	 *  java 의 모든 객체는 다형성을 가질수 있다.
	 *  
	 *  다형성은 type 이 여러개라는 의미이다. 
 */
public class MainClass02 {
	public static void main(String[] args) {
		MobilePhone p1=new MobilePhone();
		//휴대전화 객체를 생성해서 나온 참조값을 휴대전화 타입 지역변수 p1에 담기
		//p1. -> p1 지역변수는 휴대전화, 전화, 오브젝트의 기능을 모두 사용할 수 있음
	
		Phone p2=new MobilePhone(); //참치 김밥은 김밥이기도 하다
		//휴대전화 객체를 생성해서 나온 참조값을 전화 타입 지역변수 p2에 담기
		//p2. -> p2 지역변수는 전화와 오브젝트의 기능만 사용 가능 
		
		Object p3 = new MobilePhone();//김밥은 음식이기도 하다
		//휴대전화 객체를 생성해서 나온 참조값을 오브젝트 타입 지역변수 p3에 담기
		//p3. -> p3 지역변수는 오브젝트 기능만 사용 가능
		//즉, 지역변수.어쩌구 할 때 지역변수의 타입은 그 지역변수의 사용 설명서 역할을 한다.
		
	}
}

 

 

<12:30 4교시> 오후 예고 + 각자 실습

오후 예고(더보기)

더보기
package test.main;

import test.mypac.MobilePhone;
import test.mypac.Phone;

public class MainClass03 {
	public static void main(String[] args) {
		//아래 3줄을 실행하면 참조값이 몇 개가 나올까?(객체가 몇 개 생성될까?) 
		//답 : new 한것만 참조값이 있음1개 -> 참조값이 담기는 공간의 타입만 여러개
		MobilePhone p1 = new MobilePhone();
		//휴대전화 타입 안에 있는 값을 전화 타입(부모 타입) 변수에 대입 가능!
		Phone p2= p1;
		//휴대전화 타입 안에 있는 값을 오브젝트 타입(부모 타입) 변수에 대입 가능!
		Object p3=p1;
		MobilePhone p4 = (MobilePhone)p3;//캐스팅으로 담기는거
	}
}