Today I learned
1995년 썬 마이크로시스템즈에서 발표한 객체 지향 프로그래밍 언어.
자바를 만든 제임스 고슬링은 자바 커피를 하루에도 10여 잔씩 마실 정도로 자바를 좋아했다고 한다.
자바의 철학 : Write Once, Run Anywhere (WORA).
인터넷, 월드 와이드 웹(WWW) 의 출현으로 크게 부상.
Java Virtual Machine
OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터.
Java의 원시코드는 CPU가 인식하지 못하기 때문에 컴파일을 필요로 한다.
따라서 JDK 속에 포함된 javac.exe = compiler가 JVM이 이해할 수 있도록 *.java 파일을 *.class 파일(Java bytecode)로 변환한다. 그 다음 JVM이 변환된 bytecode를 OS가 이해할 수 있도록 해석한다.
<JVM의 구조>
<용어 정리>
<기본 문법>
<변수의 종류>
<변수의 타입>
<입출력>
Scanner sc = new Scanner(System.in); // Scanner 객체를 new 명령어로 생성합니다.
String input = sc.next(); // sc(Scanner)의 .next(); 를 실행하면 input 변수에 입력한 글자를 받을 수 있습니다.
Scanner sc = new Scanner(System.in);
String input = sc.next();
System.out.println("입력값 : " + input); // 입력한 글자를 출력합니다.
// 실행 결과
{입력}
입력값 : {입력}
<형변환>
작은 타입
> 큰 타입
형변환시 (자동 형변환)큰 타입
> 작은 타입
형변환시 (강제 형변환 = 캐스팅)<stack/Heap>
<1주차 Java 입출력 과제>
import java.util.Scanner;
public class Main {
// [JDK]
// (1) compiler : .java -> .class
// (2) JRE
// (3) JDB : debugging
// main method
// 자바 프로젝트는, 제일 먼저 클래스의 main 메소드를 실행시킨다. = JVM의 약속
// static : 이 프로그램이 시작할 때 무조건 실행됨
// void : 메서드의 출력값의 데이터 타입, "아무것도 없다" -> 출력이 없다.
// String[] args : 매개변수 자리
public static void main(String[] args) {
//1주차 과제
// 입력값
// - 내가 좋아하는 요리 제목을 먼저 입력합니다.
// - 요리 별점을 1~5 사이의 소수점이 있는 실수로 입력해주세요. (ex. 3.5)
// - 이어서 내가 좋아하는 요리 레시피를 한 문장씩 10문장을 입력합니다.
// 출력값
// - 입력이 종료되면 요리 제목을 괄호로 감싸서 먼저 출력 해줍니다.
// - 이어서, 요리 별점을 소수점을 제외한 정수로만 출력해줍니다. (ex. 3)
// - 바로 뒤에 정수별점을 5점만점 퍼센트로 표현했을 때 값을 실수로 출력해줍니다. (ex. 60.0%)
// - 이어서, 입력한 모든 문장 앞에 번호를 붙여서 모두 출력 해줍니다.
Scanner sc = new Scanner(System.in);
System.out.println("제목을 입력하세요.");
System.out.print("> ");
String title = sc.nextLine();
System.out.println("별점을 입력하세요.");
System.out.print("> ");
float rate = Float.parseFloat(sc.nextLine());
System.out.println("한 문장씩 입력하세요");
System.out.print("1 > ");
String se1 = sc.nextLine();
System.out.print("2 > ");
String se2 = sc.nextLine();
System.out.print("3 > ");
String se3 = sc.nextLine();
System.out.print("4 > ");
String se4 = sc.nextLine();
System.out.print("5 > ");
String se5 = sc.nextLine();
System.out.print("6 > ");
String se6 = sc.nextLine();
System.out.print("7 > ");
String se7 = sc.nextLine();
System.out.print("8 > ");
String se8 = sc.nextLine();
System.out.print("9 > ");
String se9 = sc.nextLine();
System.out.print("10 > ");
String lastSe = sc.nextLine();
int intRate = (int)rate;
double perRate = intRate * 100 / 5.0;
System.out.println("[ " + title + " ]");
System.out.println("별점 : " + intRate + " (" + perRate + "%)");
System.out.println("1. " + se1);
System.out.println("2. " + se2);
System.out.println("3. " + se3);
System.out.println("4. " + se4);
System.out.println("5. " + se5);
System.out.println("6. " + se6);
System.out.println("7. " + se7);
System.out.println("8. " + se8);
System.out.println("9. " + se9);
System.out.println("10. " + lastSe);
}
}
랜덤 당첨제였는지 팀원들도 모르게 팀장이 된 나^^
일단 과제를 받았으니 할 일을 추려봐야지...
팀장이 해야 할 일을 정리해 보았다.
- Repository 만들기
- 첫 README.md 올리기
- 팀원 1의 Pull Request를 merge하기
- 팀원 2, 3의 Pull Request를 merge하기 -> conflict error 발생
- conflict로 인한 Request Change 요청하기
- 함께 conflict 해결하기
- 팀원 2, 3의 해결된 PR을 merge하기
- github 링크 제출하기
음... 남들보다 꽤나 할 일이 많아 보이는 건 기분 탓이겠지?
하지만 CLI를 거의 사용하지 않을 수 있다는 장점이 있고... 그런 거겠지...?
일단 레파지토리를 먼저 생성했다. 이건 그냥 사이트에서 했다.
젠장 README.md 파일 추가하는 걸 깜빡했다.
그래도 이건 충분히 terminal에서 다룰 수 있으니까 일단 폴더를 만든다.
터미널에 가서 친절하게 github에서 알려준 대로 붙여 넣...기 전에
안에 내용 적어야 한다는 걸 깜빡! (나중에 알았는데 S반 8조 적어야 한다는 걸 예시에 나와있는대로 R반 1조 적었다. 방금 깨달아서 방금 고치고 다시 왔다 ^____^ ... ) 하는 바람에 다급하게 VScode 열어서 README.md 파일 작성 완료하고!!!
git init
git add README.md
git commit -m "first commit"
git branch -M main
gir remote origin ~
git push -u origin main
그랬어야 하는데...
바보 같은 나의 이야기 들어볼래...?
html 주소를 받아왔어야 하는데 ssh 키를 받아온 게 아니겠어...?
원격으로 하는 거니까 이게 맞는 건가 싶어가지고 끝없이 이어지는 ssh키의 반항을 잠시 들어주고 있었다.
애초에 이상함을 느끼지 못한 이유는 이전에 Aper 플랫폼 github이랑 db 접근을 ssh로 했기 때문이다.
그래서 조금 착각 해 버리고 말았다. 하면서도 영 이상하길래 차근차근 되짚어보니 결과적으로 나는 바보였다.
(근데 생각해보니 나 맥북 새로 샀고 ssh 새로 등록해두는게 맞긴 하더라고요. 오히려 좋아~)
아무튼 다시 html 주소 받아와서 제대로 시도했더니 한 번에 성공!
아 눈물겹다. 잘 등록이 되었고, repository 팀원들에게 공유했다.
팀원분들 중 한 분이 branch를 내 계정으로 미리 생성해두는 편이 편할 것 같다고 하셔서 각 팀원분들의 깃헙 아이디로 branch를 생성했다. 크게 어려운 일은 아니라서 손쉽게 해결했다.
이후 팀원1님의 차례에 잠시 고군분투 하였다. git을 해보신 경험이 적어 branch 변경법을 몰랐기 때문..!
일단 fork를 하고, git clone으로 팀원1님의 저장소를 받아온 후, README.md 수정을 하고, add, commit, push 이후에 저장소로 돌아와 pull request까지 완료...!
fork~~pull request 까지의 과정은 이 블로그에서 정보를 얻었다.
https://wayhome25.github.io/git/2017/07/08/git-first-pull-request-story/
이제 팀원2, 3분들의 conflict를 해결할 시간이 돌아왔다.
억지 conflict를 만들어 해결하는 과제..!
생각보다 손쉽게 성공했다.
일단 Request Change를 comment를 써서 보내고,
팀원2님이 그걸 받아 다시 수정 후 재차 PR 하신 걸 잘 받아 merge했다.
Request Change 요청 보내는 것은 이 블로그에서 정보를 얻었다.
https://velog.io/@dlzlqlzl/Github-Request-Changes-%EB%A5%BC-%ED%86%B5%ED%95%9C-PR-%EB%8B%A4%EC%8B%9C-%EC%9A%94%EC%B2%AD%ED%95%98%EA%B8%B0-30idb618
그렇게 완성된 우리의 역사...
뿌듯해~
ssh 관련해서는 이 곳에서 정보를 얻었다. 언젠가 도움이 될 거야...!
https://hyelmy.github.io/%EB%81%84%EC%A0%81%EB%81%84%EC%A0%81/setting_sshkey/