cmd + 1 -> cmd + N 클래스 생성 단축키
Intellij에서 branch 따기
출발은 main에서 시작 (*무조건)
그렇기 때문에 미리 github이나 git bash를 이용해 master -> main으로 변경해두자.
branch에서 branch를 따는 게 아니라 항상 main에서 시작해야 함.
+ 그릴 때는 위에서 아래로 봐야하지만 완성된 브랜치는 아래에서 위로 봐야 함 (위가 제일 최신 버전이기 때문)
pull과 fetch의 차이
- Pull은 소스를 가지고 오는 것 ( 환경을 최신으로 맞추는 것 )
- fetch는 변경 사항이 있는지만 체크 해 줌
+ fetch를 해보고 pull 할 게 있는 지 확인 한 후에 merge를 해야 하는 상황이 있으면 Intellij가 알아서 해 주는 편의기능이 있다.
Q. 작업 중 pull 받을 시 작성하고 있던 코드는 남아있나요?
A. 남아있다. 그리고 업데이트 할 게 있다면 Merge화면이 뜬다.
여러명이 작업하는 도중 branch들을 병합할 때 같은 부분을 수정했다면 그 서로 다른 부분때문에 conflict이 날 수 있다.
Q.
A. 여러명이 작업하는 도중 branch들을 병합할 때 같은 부분을 수정했다면 그 서로 다른 부분때문에 conflict이 날 수 있다.
클래스 생성 : command + N
자바 교재 수업 내용
상수
- 상수를 선언할 때는 타입 앞에 final을 붙여준다.
- immutable (불변) / 변수는 mutable이다.
- 참조타입에도 붙여서 값이 안 바뀌게 사용할 수 있다.
- 값이 바뀌지 않는 변수로, 예시로 상수로 선언한 변수에 다른 값을 넣어도 바뀌지 않고 오류가 뜨게 된다.
지역변수
- method, 제어문 { } 블럭안쪽을 지역이라고 합니다.
- static을 붙이지 않으면 인스턴트화 시키지 않는 이상 쉽게 호출할 수 없다. ( 실습 시 Ex파일과 Test을 나눠 호출해주는 이유 )
- main 메소드 안에 선언해서 사용
멤버변수
- 클래스 안에 메서드 안쪽에
- 멤버 변수는 속성(property) 라고도 합니다.
- 언제 사용? 게임 제작시 왼쪽으로 이동하는 메소드 오른쪽으로 이동하는 메소드 등 위치를 나타낼 때 사용 - 예시
( 연산이 끝났다고 초기화 되면 안됨 교재 p95 참고 )ㄱ
[김경록의100Days부트캠프] 모던 자바(1장-5장)
‘지역 변수’만 사용해서는 이동하는 것을 표현하기가 어렵습니다. 왜냐하면 키보드나 게임 패드에서 왼쪽 방향 키를 누르면 moveLeft() 메소드가 실행될 텐데 그때 location이라는 변수가 생성되었다가 -1 위치로 이동한 후 location이라는 변수는 사라지기 때문입니다. 메소드의 실행이 끝나도 변수에 메소드 실행 결과가 남아 있어야 하는 경우는 많습니다. 왼쪽으로 두 칸을 이동하면 -2 인데 moveLeft() 메소드 실행이 끝났다고 다시 0으로 초기화되면 안되는 거죠.
위와 같은 이유로 멤버변수를 사용하는 것 같다.
멤버변수 vs 지역변수
* 지역변수 사용 시
메소드가 끝나면 stack이 비워짐.
해당 영역이 끝나면 없어집니다.
예시 코드
public class SpaceInvader {
private void moveLeft() {
int location = 0;
location = -1;
System.out.printf("moveLeft: %d\n", location);
}
private void moveRight() {
int location = 0;
location = 1;
System.out.printf("moveRight: %d\n", location);
}
public static void main(String[] args) {
SpaceInvader si = new SpaceInvader();
si.moveLeft();
si.moveRight();
si.moveRight();
si.moveRight();
}}
값이 누적되지 않고 한 번 사용 시 없어져 똑같은 값만 나온다.
* 멤버변수 사용 시
public class SpaceInvadersMemberVariable {
int location; //멤버 변수 .클래스의 멤버다
public void moveLeft() {
location = location - 1;
System.out.printf("moveLeft : %d\n", location);
}
public void moveRight() {
location = location + 1;
System.out.printf("moveRight : %d \n", location);
}
public static void main(String[] args) {
SpaceInvadersMemberVariable simv = new SpaceInvadersMemberVariable();
simv.moveLeft();
simv.moveRight();
simv.moveRight();
simv.moveRight();
simv.moveRight();
}
}
멤버변수 사용 시 메서드 값이 누적되며 값이 사라지지 않는 것을 볼 수 있다.
둘의 차이점은 메소드의 위치인데, 여기서 주의할 점은 메소드 밖에 선언했다고 메인메서드 밖에 선언하면 안됨
메소드와 메인메소드는 다른것, 무조건 클래스 안 메소드 밖에서부터 변수를 선언해줘야 멤버변수로 사용할 수 있다.
위 예시와 같이 int location;
* 최종 위치만 받아오고 싶을 때
연산을 없앤 후 메인메소드 안에서 printf 로 출력해줄 수 있다.
class 에서 생성한 simv 변수로 멤버변수의 location 에 접근 할 수 있다.
.(점) 연산자를 이용하여 [클래스명].[멤버변수명] -> simv.location
public class SpaceInvadersMemberVariable {
int location; //멤버 변수 .클래스의 멤버다
public void moveLeft() {
location = location - 1;
}
public void moveRight() {
location = location + 1;
}
public static void main(String[] args) {
SpaceInvadersMemberVariable simv = new SpaceInvadersMemberVariable();
simv.moveLeft();
simv.moveRight();
simv.moveRight();
simv.moveRight();
simv.moveRight();
System.out.printf("최종 위치 : %d", simv.location);
}
}
접근제어
private 붙이면 같은 클래스 안에서만 접근 가능.
public 붙이면 다른 곳에서도 사용 가능
public, private -> 안 붙이면 (default) 변수 타입 앞에 붙는 것 : 접근 제어자
멤버 변수 3개 , boolean 추가 예제
public class User {
//이름, 나이, 전화번호
String name;
String PhoneNumber;
int age;
boolean isAdult(){
return age >= 18;
}
}
public class UserTest {
public static void main(String[] args) {
User teacher = new User();
teacher.name="경록 강사님";
teacher.PhoneNumber="010-1234-1234";
teacher.age=37;
System.out.printf("이름 : %s / 휴대폰 : %s / 나이 : %d\n",teacher.name, teacher.PhoneNumber, teacher.age);
System.out.printf("%s은 성인입니까? : %s\n", teacher.name, teacher.isAdult());
User manager = new User();
manager.name="재성 매니저님";
manager.PhoneNumber="010-0000-0000";
manager.age=14;
System.out.printf("이름 : %s / 휴대폰 : %s / 나이 : %d\n",manager.name, manager.PhoneNumber, manager.age);
System.out.printf("%s은 성인입니까? : %s\n", manager.name, manager.isAdult());
}
}
3개의 멤버 변수를 이용해 String 타입2개와 int타입 1개를 입력 받아
Test 파일에서 새로운 인스턴스를 생성하여 활용해보았다.
+boolean 메소드 사용에 대한 자세한 이야기는 더 배운 다음 적어야 함
Q. isAdult 에 age 변수에 선언한 값이 어떤 원리로 들어가는건가요???
A.
CS
Q. class의 멤버변수는 기본값이 있고 지역변수는 기본값을 못 쓰는 경우
A. new 사용 시 인스턴스로 만들 때 기본값을 준다.
Q. 스태틱 변수는 어떻게 초기화가 되는건가요?
A. static은 JVM과 함께 라이프 사이클을 갖기 때문에 JVM이 실행되는 순간에 초기화됨
Heap과 Stack
스택은 원시타입
힙은 참조 타입 , 영역은 이진트리 구조로 구성되어있습니다?
스택 = [ 티슈 ] 위에서부터 뽑아 쓰는 것으로 후입선출 LIFO(Last In First Out)
힙 = 이진트리 기반의 자료구조 - 다리가 두개만 있는 TRee
[김경록의100Days부트캠프] 모던 자바(1장-5장)
스택(stack) 영역은 스택(stack)이라는 자료 구조로 데이터를 저장하고 힙 영역은 힙(heap) 자료 구조로 데이터를 저장하는 곳입니다. 스택 영역에는 원시 타입(primitive type)의 변수들이 저장되고 인스턴스 변수는 힙 영역에 저장됩니다. 힙이라는 자료 구조는 이진 트리 기반의 자료 구조입니다. 힙에 데이터를 넣으면 특정 조건에 의해 정렬해 줍니다.

[김경록의100Days부트캠프] 모던 자바(1장-5장)
가비지 컬렉션(garbage collection)은 자바에서 아주 중요한 개념입니다. 가비지 컬렉션은 사용이 완료된 인스턴스화된 클래스를 메모리에서 비우는 작업입니다. 필요에 의해 new라는 키워드로 생성해서 사용했지만 사용하고 나서 더이상 사용하지 않는 상태가 되면 메모리 공간만 차지하는 가비지(쓰레기)가 되죠. 메모리에 사용하지 않는 클래스들이 계속 자리만 차지하고 있으면 메모리는 꽉 차게 되고 결국 서버에 부담을 줍니다.
가비지 컬렉션은 말 그대로 ‘쓰레기 줍기’입니다. new로 생성한 클래스의 인스턴스를 메모리에서 제거 하여 메모리 공간을 효율적으로 쓸 수 있도록 하는 것입니다.
private 붙이면 같은 클래스 안에서만 접근 가능.
public 붙이면 다른 곳에서도 사용 가능
public, private -> 안 붙이면 (default) 변수 타입 앞에 붙는 것 : 접근 제어자

isAdult 에 age 변수에 선언한 값이 어떤 원리로 들어가는건가요???
'study' 카테고리의 다른 글
(230425) Java / Codeup 1037까지 (0) | 2024.07.25 |
---|---|
(230424) Java - 타입변환 (0) | 2024.07.25 |
(230420) Java - 변수 / Code-up 문제 풀이 (0) | 2024.07.25 |
(230419) Java / Git / Intellij / SourceTree 입문 / Code-up 문제 풀이 (0) | 2024.07.25 |
(230418) JAVA, Intellij 입문2 (0) | 2024.07.25 |