Java의 기초, git의 가지치기

문이빈·2023년 7월 18일
0

Java

  1. D: 안에 workspace폴더 생성.

  2. https://java.oracle.com에서 17버전 다운로드.

  3. 환경변수
    JDK의 위치를 알려줘야 한다.
    JAVA_HOME
    C:\Program Files\Java\jdk-17

  4. Path
    C:\Program Files\Java\jdk-17\bin
    path는 bin에게 걸어주어야 한다.
    개똥이
    개똥이의 속성 = %개똥이% => 010-1111-1111
    %JAVA_HOME% => C:\Program Files\Java\jdk-17


window - cmd - path

※ 객체지향프로그램

  • 자바는 대소문자 구별 (명령어는 소문자)

  • 메소드( )
    명령어들의 집합
    자바는 public static void main(String[] args)

  • 콘솔장치 (System) (자바는 콘솔 프로그램)
    입력 : 키보드 , System.in
    출력 : 화면, System.out
    . 은 소속 개념 ~안에 있다


파일 저장

HelloTest.java - source file
     ↓ 컴파일
HelloTest.class
     ↓ 실행
그래서 JVM(자바가상머신)등장,   (원래는 실행파일 HelloTest.exe 자바는 없음)
인터프리터 방식으로 실행함 (한줄씩 수행)

d: ) D드라이브로 가라

workspace 폴더로 가자

dir로 내용 확인


컴파일

javac 파일명.확장자

한글이 깨져서 나와서 인코딩 실행하면서 class 파일 생성
javac HelloTest.java -encoding UTF-8

실행

java 파일명 으로 실행


bit

  • 정보의 최소 단위
  • 0 또는 1 밖에 없다. (2진수)
숫자   '문자'(1개)   "문자열"
 2        '2'        "2"
         '25' x      "25" o

byte

  • 알파벳 영문자,숫자 기준은 1개 ex) a, 4..
  • 1byte = 8bit
  • 한글 한 단어당(자음,모음) = 2byte(16bit)
    ex) ajf;lajf;las;lfd->1000글자 -> 1000byte -> 1KB

(1KB = 약 10^3 1024 byte)

      컴파일          2진수        10진수     ASCii(아스키 코드)
'A' ---------------> 0100 0001 ---------------> 65
'B' ---------------> 0100 0011 ---------------> 66
'C' ---------------> 0100 0011 ---------------> 67
'a' ---------------> 0110 0001 ---------------> 97
 5  ---------------> 0000 0101 ---------------> 5
'5' ---------------> 0000 0101 ---------------> 53
 0  ---------------> 0000 0000 ---------------> 0
'0' ---------------> 0011 0000 ---------------> 48

그래서 'A'와 'B' 중에 'B'가 더 크다
"A"와 "B"의 값은 비교 불가 문자열은 아스키 코드 값이 없기 때문이다.

class HelloTest{
           public static void main(String[] args){
          			System.out.println("안녕하세요");
			
			System.out.println(2+5);
            System.out.println('2' + '5');
			System.out.println("2" + "5");
          }
  }

진수

  1. 2진수 : 0,1 -> 2 = 10 3 = 11 (2진수로 바꾸고자 하는 수를 2로 나누면)
  2. 8진수 : 0~7 -> 8 = 10
  3. 10진수 : 0~9 -> 10
  4. 16진수 : 0~8, 9, a(10), b(11), c(12), d(13), e(14), f(15) -> 16 =
    16진수 표현

ex) int a = 10; 이면
문자 'a'+ 3 = 100
숫자 0xa + 3 = 13 0xd로 표현가능
문자열 "a" + 3 = a3(문자열은 아스키 값이 없음 그냥 결합임)
변수 a + 3 = 13

'A' + 32 = 'a'
대문자 <-> 소문자 ± 32
숫자 <-> 문자 ± 48

2 -> "2" = 2 + ""
"2" -> 2 = Integer.parseInt("2")


이클립스

처음 설정

window properties로 가서 설정하고 시작

처음에 Java Project -> package -> File을 만들어야 함

체크 해체


Variable(변수)

  • 변하는 값

변수명

  • 반드시 첫글자는 영문자, 소문자

[형식]
자료형 변수명;


자료형

1. 기본형

논리형 boolean - true, false
문자형 char (2byte - uni code)
정수형 byte - (1byte) : -128 ~ +127
      short - (2byte 16bit) : 32768 ~ -32767
      int - (4byte) : -21억 ~ +21억
      long - (8byte 64bit) 
실수형 
float (4byte)
double (8yte)

package class_;

public class Variable {
    static int b;
    static double c;
    int d;
// main 전에 선언은 가능하지만 명령은 불가

public static void main(String[] args) {
	//지역변수 (local variable)

	short a =65; //0100 0001
	int b = 65;
	
	System.out.println("지역변수 a = "+ a);
	System.out.println("지역변수 b = "+ b);
	
	System.out.println("필드 b = " + Variable.b);
	System.out.println("필드 c = " + c);
	//System.out.println("필드 c = " + new Variable().d);
	
	Variable v = new Variable(); // 생성
	System.out.println("객체 v = " + v);
	System.out.println("필드 c = " + v.d);
}

}


2. 객체형 - class

모두 대문자로 시작
Integer
String
System

3. 배열형

메소드

호출된 메소드는 반드시 호출한 곳으로 되돌아 온다.
명령어들의 집합체
[형식]

  1. 메소드의 구현

    return형 메소드명(인수형 인수, 인수형 인수, ....){
    
    }

2. 호출

객체명.메소드명(값1, 값2, 값3,.....)
클래스명.메소드명(값1, 값2, 값3,.....) : static인 경우

자바의 모습

static void와 non static의 호출 방법

package class_;

public class Method01 {

public static void disp() { // 구현
	System.out.println("static method...");
}

public void output() { // 구현
	System.out.println("non-static method...");
	
}

public static void main(String[] args) {
	Method01.disp();             // Method01 클래스 안에 있는 disp( )함수 호출
	Method01 m = new Method01(); // static이 아닌 output()함수의 호출
	m.output();
    }
}

package class_;

public class Method02 {

public static void main(String[] args) {
	Method02 m = new Method02();
	
	int s1 = m.sum(25, 36); // 호출
	System.out.println("합 = "+s1);
	
	int s2 = m.sub(25, 36); // 호출
	System.out.println("차 = "+s2);

	int s3 = m.mul(25, 36); // 호출
	System.out.println("곱 = "+s3);
	
	double s4 = m.div(25, 36); // 호출
	System.out.println("몫 = "+s4);
}

	public int sum(int x, int y){  // 구현
		return x+y;
	}
	public int sub(int x, int y){  // 구현
		return x-y;
	}
	public int mul(int x, int y){  // 구현
		return x*y;
	}
	public double div(double x, double y){  // 구현
		return x/y ;
	}
}

아래처럼 바꿀 수도 있음

 형식
정수형  %d
실수형  %f
문자형  %c
문자열  %s

실수형으로 5자리만 출력하는데 소숫점 3자리까지만 출력 => %5.3f
다 됐고 소수점 3자리까지 보여줘 .3f

System.out.println("몫 = "+ String.format("%.3f", s4));

return (double)x/y ; // 강제 형변환(Cast 연산)

객체지향 (현실세계의 모든 것)을 문서화

추상화

ex) 라면자판기

속성(데이터)               기능(메소드)
라면, 젓가락, 물이 필요     물의 양, 온도 올/내,

ex) 자동차
문, 좌석, 엔진, 바퀴       달린다, 속도, 멈춘다.

package class_;

class Person {
    String name;
    int age;
}
//--------------------------
public class PersonMain {

public static void main(String[] args) {
	Person aa = new Person();  // aa = 객체
	aa.name = "문이빈";
	aa.age = 28;
	System.out.println("객체 aa = " + aa);
	System.out.println(aa.name +"\t"+aa.age);
     }
}

자바 파일은 한개

클래스 파일은 2개 생김


private
package class_;

class Person {
    private String name;
    private int age;

public void setName(String n){
	name = n; 
}
// 중간자 - 문이빈이 name에 들어가지 못하니까 문이빈을 n에게 n이 name에게 준다.

public void setAge(int a) {
	age = a;
}
// return 값없으면 public void

public String getName(){
	return name;
}
public int getAge(){
	return age;
	}
}
//--------------------------
public class PersonMain {

public static void main(String[] args) {
	Person aa = new Person();  // aa = 객체
	aa.setName("문이빈");
	aa.setAge(28);
	System.out.println("객체 aa = " + aa);
	System.out.println(aa.getName() +"\t"+aa.getAge());
    }
}


aa에 있는 setName에 홍길동을 n에 보내고 name이 n 이라고 받고 호출을 함.

추가적으로 더 연습

package class_;

class Person {
    private String name;
    private int age;

public void setName(String n){
	name = n; // 중간자 - 문이빈이 name에 들어가지 못하니까 문이빈을 n에게 n이 name에게 준다.
}
public void setAge(int a) { // return 값이 없으면 public void
	age = a;
}

public String getName(){
	return name;
}
public int getAge(){
	return age;
}
public void setData(String n, int a) {
	name = n;
	age = a;
	
	}
}

//--------------------------
public class PersonMain {

public static void main(String[] args) {
	Person aa = new Person();  // aa = 객체
	aa.setName("문이빈");
	aa.setAge(28);
	System.out.println("객체 aa = " + aa);
	System.out.println(aa.getName() +"\t"+aa.getAge());
	System.out.println();
	
	Person bb = new Person();
	bb.setName("문우빈");
	bb.setAge(21);
	System.out.println("객체 bb = " + bb);
	System.out.println(bb.getName() +"\t"+bb.getAge());
	System.out.println();
	
	Person cc = new Person();
	cc.setData("코난", 35);
	System.out.println("객체 cc = " + cc);
	System.out.println(cc.getName() +"\t"+cc.getAge());
	System.out.println();
    }
}

주소도 다 다름.

추가적으로 작성함. 
 
public void setData() {}

Person dd = new Person();
	dd.setData();
	System.out.println("객체 dd = " + dd);
	System.out.println(dd.getName() +"\t"+dd.getAge());
	System.out.println();

null값 나옴
클래스 밑에 애들은 필드라고 많이 부르며 초기화가 끝난애들이다...? 값은 null이 나옴

Overload (쌍둥이)

public void setData(String n, int a) {
	name = n;
	age = a;
    
public void setData() {}

둘은 생긴건 다르지만 성격이 다름

  • 하나의 클래스 안에서 메소드명이 똑같을 때
  • 인수형이 다르거나 인수 개수가 다른 경우 다른 메소드로 취급한다.

ex)

class AA{
        public void sub(int x){}
        public void sub(int x, int y){}
        public void sub(char x){}
        public int sub(int x){}
        public void sub(String x){}
}

d여기서 1,4번이 다른거임 리턴값이 다른것 이므로 다른 메소드 이다.


GitBash

폴더에 들어간 것을 확인

gitHub에 올라간 것을 확인

복습 완료


브랜치와 머지

(1) 브랜치(Branch) - 가지치기

  • 개발을 하다 보면 코드를 여러 개로 복사해야 하는 일이 자주 생긴다.
  • 코드를 통째로 복사하고 나서 원래 코드와는 상관없이 독립적으로 개발을 진행할 수 있는데,
    이렇게 독립적으로 개발하는 것이 브랜치다.
  • 모든 버전 관리 시스템은 브랜치를 지원한다.
    * 사용중인 것

(2) 브랜치가 필요한 경우

  • 동일한 상품이지만 고객사별 다른 대응(버전)이 필요할 때
  • 개발 시, 일정기간 동안 실험적인 일(작업)을 하게 될 때
  • 서비스 적용과 개발 진행을 병렬로 처리할 때

(3) 머지(Merge)

  • 특정 규칙에 따라 순서대로 둘 이상의 파일을 합쳐 하나의 파일로 만드는 것

(3) 명령어

1) 브랜치 확인 – git branch

* 사용중인 것
무엇이 있는지 확인

2) 브랜치 만들기 - git branch 브랜치명

3) 포인터 변경 - git checkout 브랜치명

index.html이 그대로 있는 것을 확인할 수 있음

4) 변경된 내용을 합치기 - git merge 병합할_브랜치명

먼저 main로 포인터를 옮긴 후, main에 브랜치를 머지한다.
수정함

git log ) commit 한 내용 확인 -> 1은 main
checkout으로 main으로 돌아와서 확인해보면 commit하여 GitHub에 올라가있는 파일을 화인할 수 있다.
git merge로 main으로 병합하여 준다.

5) 브랜치명 삭제하기 - git branch -d 브랜치명

삭제하고 branch가 있는지 확인함.

한번 더 연속으로 연습해보기1


그리고
만약

init 저장소로 보내자

한번 더 연속으로 연습해보기2

저장소를 만들게 되면 기본 브랜치는 'main' 브랜치 이다.

숙제

package class_;

class SungJuk {
    private String name;
            int kor;
            int eng;
            int math;
            int tot;
            double avg;
            String grade;
        
public void setData(String name, int kor, int eng, int math) {
	this.name = name;
	this.kor = kor;
	this.eng = eng;
	this.math = math;
	
}
public void calcTot () {
	 tot = kor + eng + math;
}
public void calcAvg () {
	 avg = (double)tot / 3;
}
public void calcGrade () {
	  if(avg >= 90) {
		  grade = "A";
	  }else if(avg >= 80) {
		  grade = "B";
	  }else if(avg >= 70) {
		  grade = "C";
	  }else if(avg >= 60) {
		  grade = "D";
	  }else {
		  grade ="F";	  
	  } 
}
public String getName() {
	  return name;
}
public int getKor() {
	  return kor;
}
public int getEng() {
	  return eng;
}
public int getMath() {
	  return math;
}
public int getTot() {
	  return tot;
}
public double getAvg() {
	  return avg;
}
public String getGrade() {
	  return grade;
	}
}

public class SungJukMain {

public static void main(String[] args) {
	SungJuk a = new SungJuk();
	a.setData("홍길동",95,84,78);
	a.calcTot();
	a.calcAvg();
	a.calcGrade();
	
    System.out.println("이름\t국어\t영어\t수학\t총점\t평균\t학점");
    System.out.print(a.getName() + "\t");
    System.out.print(a.getKor() + "\t");
    System.out.print(a.getEng() + "\t");
    System.out.print(a.getMath() + "\t");
    System.out.print(a.getTot() + "\t");
    System.out.printf("%.3f\t", a.getAvg());
    System.out.println(a.getGrade());
	}
}

20분 동안 오류를 잡았는데 파일의 이름과 class이름의 일치 문제였다
-> 클래스가 2개여서 main쪽 class 이름을 사용해야 한다.

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

아주 유용한 정보네요!

답글 달기