14일차(1)/java(7) : class / static, non-static / eclipse git으로 관리하기
* class : public class~ 라고 시작하는 영역 안쪽을 가리킨다.
[ Class의 역할 ]
1. 객체의 설계도 역할
- 객체를 new 했을 때(생성) 해당 객체가 어떤 저장소와 어떤 기능을 가질지 설계한다.
- 객체란 저장소와 기능으로 이루어지며, 저장소:field, 기능:method 이라고 한다.
(객체지향 언어란 이 필드와 메소드를 활용해 원하는 결과를 이끌어내는것.)
- 어떤 클래스로 객체를 생성했느냐에 따라 heap영역에 있는 객체의 종류는 달라진다.
2. 데이터 타입
- 지역변수 또는 필드의 데이터 타입을 설정하는 데 사용된다.
- java에서는 어떤 참조값을 변수에 담으려면 타입을 설정(명시)해야 하는데, class는 이 데이터 타입의 역할을 한다.
(지역변수는 stack영역, 객체 또는 클래스의 필드에 데이터타입 역할)
3. static 자원을 포함하는 역할
- static 자원 : static field or static method 를 말한다.
- static field, static method 를 클래스안에 포함하고, static 영역에 올라간다.
(클래스 자체가 static 영역에 올라가는 것.)
- 필드와 메소드는, 객체 안에 만들어질 때도 있고 (non-static의 경우)
클래스 안에 만들어질 때도 있다.(static의 경우)
[ static class ↔ non-static class 구분 ]

1) non-static 의 경우 (public void~ 줄에 static이 없다)
- car같은 경우 new 할 때마다 새 객체가 만들어진다.
- new할 때마다 같은 모양의 객체가 힙영역에 여러개 만들어진다. 각각의 참조값(사물함 key)는 다르다.
- new란 설계도로 물건을 만들어낸다는 의미. new를 사용해서 필드를 참조하거나 메소드를 사용할수있다.
* non-static 객체 생성방법
- 변수에 담기 → 필요할때 여러 번 사용할 수 있다. 참조값이 지역 변수에 담겨 있기 때문에.
지역변수에담아놓으면 이후에 몇번이든 편하게 사용할수있다.
ex) Car c1=new Car(); / c1.name
- 변수 없이 쓰기 → 한번 사용하고 버리는 것이다. 참조값이 어디에도 담겨있지 않다.(따라서 용도가 제한적)
ex) new Car().name / new Car().drive();

2) static 의 경우
- MyUtil 같은 경우에는 설계도가 아니고, 이 자체로 클래스가 static 영역에 올라간다. 객체를 생성하지 않아도 되고, class째로 static영역이라는 메모리에 올라간다.
- 객체 생성과는 관련이 없고, 이 자체로 바로 사용할수있다!
- MyUtil.version / MyUtil.send() / B.your / A.test() 형태로 클래스명으로 바로 불러와 사용한다.
Q) static 공간은 heap 공간과 어떻게 다른지? 권한이 다르거나 더 공간이 큰지?
A) static 공간이 여유있게 크진 않다. 굳이 차이점을 보자면
static영역에 올라간 자원은 해제가 되지 않는다.(앱이 실행되는동안 쭉 유지되고, 앱이 종료될때 해제된다.)
이와 다르게 heap영역에 올라간 자원은 사용하지 않으면 자동 회수된다.(가비지)
오직 하나만 만들어놓고 쓰겠다면 static! 그게 아니라면 non-static으로 만들기.
보통 특정 그룹의 객체들이 공유하는, 공유할 만한 자원(필드,메소드)은 static 영역에 만들어두고 사용한다.
ex) 스타크래프트에서 [질럿] 에게 체력, 위치, 공격력, 방어력이라는 정보가 있다면.
- 체력&위치 : 하나하나마다 보유한 체력과 각각의 위치가 있다. 별도로, 독립적으로 관리되어야 하는 정보들. 객체마다 고유한 기능인 경우 non-static!
- 공격력&방어력 : 각 유닛의 공격력, 방어력은 모두 같다. 한번 업그레이드하면 다같이 올라간다. 여러 객체에서 공유할 자원이 있다면 static으로!
- 우리는 java로 웹 프로그래밍을 한다.
객체에 회원 한명의 정보, 글 하나의 정보, 상품 하나의 정보 등등을 담을 예정이다.
객체의 필드에 담을 예정이고, 묶음으로 관리할 것이다.
- 클래스, 필드, 매소드의 공개 범위를 각각 설정할 수 있다.
클래스별로 다른 패키지에 있는 경우,
클래스, 필드, 메소드를 공개할 것인지 결정에 따라 접근 지정범위를 세세하게 지정할수있다.
- public 예약어: 공개된, 공용의 (전체 공개)

- 변수명, 필드명을 잘 지어야한다! 어떤 종류의 값인지 예상이 가도록.
메소드도 어떤 동작을 하는지 대략 예측이 가도록 짓는 것이 좋다.
ex) showInfo: 정보를 보여준다. indexOf: 인덱스를 얻어낸다. 등등...
- 그러지 않으면 유지보수할 때 힘들다.
가독성이 좋아야 유지보수가 편하다. 의미 있는 필드명을 짓는 것이 좋다.
- 숫자로 시작하지 않고, 예약어가 아니면 변수는 무엇으로든 지을 수 있다.
[ 이클립스 프로젝트를 공유하고 깃으로 관리하기 ]
- 바탕화면에 MyGitRepo > java_work 폴더 만들기. 이 안에 깃 저장소를 만들 것.
java_work에 init 하고 이 폴더에 프로젝트를 저장한다고 생각하면 된다!

- 어떤 프로젝트를 깃으로 관리할 것인지 선택!
- 프로젝트 폴더 우클릭 - team - Share Project
Create - Browse 에 저장할 위치 지정 (MyGitRepo-java_work 폴더 선택해줌)

- Current → Target 으로 아예 위치를 옮겨주겠다는 의미이다.
java_work를 init 한 것!

- 폴더 아이콘에 ? 가 생겨났다. ?는 untracked file이 있다는 의미

- 해당 폴더에서 git bash를 열어보면 아직 커밋하지 않은, untracked file이 있다고 인식함.

- 한번 Share 하고나면 File-Team 안에 다양한 선택지가 생김
폴더 우클릭 - Team - Commit

- 아래 콘솔 창에 git staging 이라는 창이 새로 생기고,
untracked file(unstaged file)이 쭉 나오는데 이걸 다 커밋하면 별로 안 좋다. 빼야 할 건 빼고 커밋하기.
- .classpath, .project, org.~~ 이런 건 설정파일이고, 커밋의 대상으로 하지 않는다. 배제하기!
- 설정이라는 것은 현재 사용하고 있는 컴퓨터의 설정이기 때문에, 다른 pc나 다른 버전의 이클립스에서 다운받아서 사용하면 오류가 발생할 수 있다. 내가 작업한 내용만 커밋해서 관리하기.

- gitignore.io 에 현재 운영체제, 프로그램, 언어명을 입력하면 배제할 파일 목록이 나온다
- 전체 복사해서 메모장이나 VScode 에 붙여넣기

- 그 파일을 해당되는 폴더 안에 .gitignore 라는 이름으로 저장한다.(루트폴더에 저장하기!)
어떤 파일을 무시(배제)할것인가를 지정하는 내용이다.
- 설정파일들은 그대로 폴더에 이동된다.
폴더에는 그대로 있지만 commit되지는 않도록 하는 것이다.
- .project / .classpath 는 목록에 없어서 메모장에 추가로 넣어줌
- 이 작업은 최초 init하고 딱 한 번만 하면 된다.

- unstage → stage에 올리려면 +, ++(한번에) 클릭하거나 드래그하면 된다.
- -, -- 아이콘을 눌러서 다시 unstage 할 수도 있다.
- 저 3개의 칸들이 다 깨끗하게 비어있으면 working tree가 clean한 것!

- commit 하고나면 해당 폴더에 작은 주황색 원통형 아이콘이 추가된 것을 볼 수 있음!

- 다른 프로젝트들도 같은 방법으로 커밋해준다.

- git 환경(우측상단 아이콘)에 들어가서 보면 이렇게 commit 이력을 확인할 수 있다.
'국비교육(22-23)' 카테고리의 다른 글
14일차(3)/java(9) : Method (Overloaded Method) (0) | 2022.10.25 |
---|---|
14일차(2)/java(8) : Method (0) | 2022.10.25 |
13일차(5)/java(6) : 객체의 field, method 호출 실습 (0) | 2022.10.24 |
13일차(4)/java(5) : class, field, method / static method (0) | 2022.10.24 |
13일차(3)/java(4) : Operator (0) | 2022.10.24 |