✔
git저장소는 자신의 컴퓨터인 로컬 저장소와 서버에 있는 원격 저장소로 나뉩니다.
✔ 로컬 저장소에서 푸쉬를 해줘야 변경사항이 원격저장소에 반영됩니다.
- 원격저장소에서
CI/CD(배포하는기능) ▶CI/CD에 대해서는 나중에 더 자세하게 다루겠습니다.
(java build,docker build)
- 두개의 브랜치에서 같은 라인의 코드를 수정후 커밋한뒤에 main에 수정 사항들을 merge(병합) 합니다. ▶ 그러면 이때 conflict가 발생합니다.
✔ 이유
: main의 입장에서는 두 개의 브랜치가 동일한 라인의 코드를 수정하여서 어떤 코드를 경정해야될지 모르기 때문입니다.
▶ confilt가 발생하였으면 수동으로 개발자가 결정해 줘야됩니다.
Pull : 최신 내용(로직)을 로컬 저장소로 가져오면서 병합합니다.Fetch : 원격 저장소의 변경사항이 있는지만 체크 합니다. pull과 다르게 자동으로 병합해주지 않습니다.📌 Update Project
merge(병합)을 할것인지Reabase할것인지 물어봅니다.merge를 해야하는 상황이 있으면 인텔리제이가Fetch를 해보고pull할게 있는지 비교 및 확인하여merge를 해줍니다.
✔ 번외
pull을 하게되면 개발자가 작성하고 있던 코드는 남아있나요? 다시 작성해야하나요?
- 개발자가 작성하고있는 코드는 남아있습니다.
- 하지만 개발자가 작성하고 있는 코드에 업데이트할 부분이 있다면
Merge화면이 뜨게됩니다.
✔ 변수
(변하는수)
(덮어쓴다고 생각하면 될것입니다.)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int number = 10; // 변수 선언
System.out.println(number); // 10을 출력합니다.
number = 20;
System.out.println(number); // 20을 출력합니다.
}
}
✔ 상수
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
final int number = 10; // 상수 선언
System.out.println(number); // 10을 출력합니다.
number = 20; // 에러 발생
System.out.println(number);
}
}
final 이 붙게되면 변하지 않는 수 즉 상수로 만들겠다는 것입니다.private static final 타입
public class Main {
private static final int USER_AGE = 25; // 멤버 상수 선언
public static void main(String[] args) {
System.out.println(USER_AGE); // 25 출력
}
}
✔ 상수로 사용할때 주로
private final static을 붙여 사용합니다.
- 이유는 ?
private static final을 선언한 변수를 사용하면 재할당하지 못하며, 메모리에 한 번 올라갑니다.
static이 붙어있어 객체의 생성없이 사용이 가능하며, 같은 값을 클래스 내부의 전체 필드, 메서드에서 공유할수 있습니다.
📌 변수는 크게 2가지로 나눌수 있습니다.
public class Main {
int limit = 1; // 멤버변수 - 인스턴스 변수
int age; // 멤버변수 - 인스턴스 변수
static String name = "신재원"; // 멤버변수 - 클래스 변수
public static void main(String[] args) {
Main main = new Main(); // 인스턴스화
System.out.println(main.limit); // 1 출력
System.out.println(main.age); // 0 출력
System.out.println(name); // 신재원 출력
}
}
- 인스턴스 변수는 객체를 생성 (인스턴스화)을 해야 사용이 가능합니다.
- 클래스 변수는 static을 붙여서 만들고, 객체의 생성없이 사용이 가능합니다.
- 클래스 변수는 왜 사용 ?
1. 인스턴스를 생성이 필요없는 값을 원하는경우,
2. 변경사항을 모든 인스턴스가 공유해야되는경우 사용합니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// int age; 초기화를 하지 않을시 오류
int number = 10; // 변수 선언 (지역 변수)
System.out.println(number); // 10을 출력합니다.
number = 20;
System.out.println(number); // 20을 출력합니다.
}
}
메소드 안에서 선언되고, 해당 메서드 안에서만 사용 가능하다.
(초기화를 꼭 해줘야 합니다.)
public class Main {
private void moveLeft() {
int location = 0;
location = location - 1;
System.out.printf("%d\n", location);
}
private void moveRight() {
int location = 0;
location = location + 1;
System.out.printf("%d\n", location);
}
public static void main(String[] args) {
Main main = new Main();
main.moveLeft(); // -1 출력
main.moveLeft(); // -1 출력
main.moveLeft(); // -1 출력
main.moveRight(); // 1 출력
main.moveRight(); // 1 출력
}
}
- 값이 누적되지않고, 메소드가 실행될때마다 스택에 등록되어 사용하며,
-1,1만 출력됩니다.- 메소드는 스택 영역에 등록되며, 메소드가 종료될때 마다 같이 소멸되어 없어집니다.
Heap (힙) 영역을 비우는 것 입니다.
private static final int userName = "신재원"; // GC의 대상이 아닙니다.
private final int userAge = 25; // GC의 대상입니다.
static 이 붙으면 JVM과 Life Cycle을 같이 하게됩니다.static 이 안 붙으면 Class와 Life Cycle을 같이 하게됩니다.Stack
- 먼저 들어간 데이터가 나중에 나옵니다, LIFO (후입선출) 구조입니다.
- 알고리즘에서 그래프의 깊이 우선 탐색 (BFS)에 주로 사용 됩니다.
Heap
- 이진 트리 구조이며 추후에 자세하게 다룰 예정입니다.
✔ 접근 제어자 란 ?
변수와 함수, 클래스에 대한 접근을 제어하는 문법입니다.
- 접근을 제한하는 이유 ?
외부에서의 잘못된 변경을 막기위해서 제한하는 것입니다.
➡ 오른쪽 순서로 접근범위가 작아지게됩니다.
public > protected > default > private
public
: 접근을 제한하지 않습니다.
(모든 클래스에서 접근 가능, 패키지 상관 X)protected
: 같은 패키지 클래스와, 다른 패키지의 자식클래스에서 접근 가능합니다.default (생략)
: 같은 패키지안의 클래스에서 접근 가능합니다.private
: 같은 클래스에 있는 멤버들만 접근 가능합니다.