9:10 경 학원 도착.
날이 춥기도 하고 늦잠도 잔 겸 겸사겸사 느즈막히 나왔는데 생각보다 편하게 와서 생각보다 좋다고 느끼는 중
일찍 왔으면 어제 상담한 내용 정리하려고 했는데, 5분밖에 없어서 대충 요약하자면 블로그에 내 생각이나 왜 그런 이유로 코딩 했는지 같은 것을 좀 더 많이 풀어써보라는 가이드 받은거, 정보처리기사 한 번 해보라는거
<9:30 1교시>
리눅스 명령어
ls : 디렉토리의 파일 이름만 나옴
cat 텍스트 파일 이름.확장자 : 텍스트 문서의 내용을 다 보여줌
git commit을 입력하면 vi(vim) editor가 열린다
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을 눌러서 워크스페이스를 찾으면 됨.
소스코드만 추적할 수 있게 해주는 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;//캐스팅으로 담기는거
}
}
'공부의 기록 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 12/19 오전 기록 021-1 (0) | 2024.12.19 |
---|---|
자바 풀 스택 12/18 오후 기록 020-2 (1) | 2024.12.18 |
자바 풀 스택 12/17 오후 기록 019-2 (1) | 2024.12.17 |
자바 풀 스택 12/17 오전 기록 019-1 (0) | 2024.12.17 |
자바 풀 스택 12/16 오후 기록 018-2 (0) | 2024.12.16 |