git add [파일명]
git add .
: 현재 디렉토리에 있는 모든 파일을 add
한다.git commit -m "메시지"
// 참조에 대해 이해하기 쉬운 예시
Commit c0 = new Commit(); // c0 커밋
Commit c1 = new Commit(); // c1 커밋
Branch main = c1; // main branch는 c1 커밋을 단순 참조할 뿐
git branch [branch명]
: 브렌치 생성git branch -d [branch명]
: 브렌치 삭제git branch
: 생성된 브렌치 확인git checkout [branch명]
: 해당 브렌치로 이동 (Head가 해당 branch를 가리킨다)git checkout -b [branch명]
: 위의 두 과정이 한번에 된다.git log —-branches -—graph --oneline
: 브렌치 그래프를 간략하게 보여준다.
git merge [A브렌치]
: A브렌치를 현재 가리키는 브렌치로 합병한다.cd [경로]
: 해당 경로로 이동touch [파일명]
: 파일 생성rm -rf [파일명]
: 파일 삭제git log
: 로그 확인char c = 'a';
String s = "abc";
char c = ‘a’
String s = “abc”
String s1 = "하하";
String s2 = "하하";
System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
s1 == s2
== 연산자
는 객체의 주솟값을 비교하여 비교하려는 객체가 동일한 객체인지를 판별한다.s1.equals(s2)
equals 연산자
역시 주소값 비교를 수행하는 메서드이다.true
인 이유s1
을 선언할 때 만들어놓은 “하하”를 s2
에서 재활용한다. 따라서 true
가 나옴.//1번 상황
String s = "*"; //선언
s += "*"; //연산
s += "*"; //연산
s += "*"; //연산
s += "*"; //연산
System.out.println(s); //출력 : *****
//2번 상황
StringBuilder sb = new StringBuilder();
sb.append("*");
sb.append("*");
sb.append("*");
sb.append("*");
sb.append("*");
System.out.println(sb.toString()); //출력 : *****
s += "*"
*
을 추가한 문자를 계속 문자 저장공간에 저장한다. (String 불변성)sb.append("*")
*
을 저장, 이후 똑같은 값을 사용할 때 재활용한다.
Object
클래스를 확인해보면 toString()
메서드가 있는 것을 확인할 수 있다.Object
클래스를 상속하므로 toString()
메서드 역시 사용할 수 있다.toString()
메서드를 오버라이드
하여 내가 원하는 대로 출력할 수도 있다. class Main {
public static void main(String[] args) {
사람 a사람1 = new 사람("홍길동", 22);
사람 a사람2 = new 사람("홍길순", 23);
System.out.println(a사람1); // 출력 : 사람[이름=홍길동,나이=22]
System.out.println(a사람2); // 출력 : 사람[이름=홍길순,나이=23]
}
class 사람 extends Object {
String 이름;
int 나이;
사람(String 이름, int 나이) {
this.이름 = 이름;
this.나이 = 나이;
}
@Override
public String toString() {
return "사람[이름=" + 이름 + ",나이=" + 나이 + "]";
}
}
System.out.println(a사람1)
자바는 a사람1
객체를 자동으로 toString()
을 통해 String
으로 바꿔서 출력해준다.
equals()
역시 Object
클래스의 메서드이다.equals()
를 오버라이드
한다.
class 사람 {
String 이름;
int 나이;
사람(String 이름, int 나이) {
this.이름 = 이름;
this.나이 = 나이;
}
@Override
public boolean equals(Object o) {
// 객체 o가 사람이 아니면 false
if (!( o instanceof 사람)) {
return false;
}
사람 other = (사람)o;
// 두 사람의 이름이 다르면 false
if(!this.이름.equals(other.이름)) {
return false;
}
// 두 사람의 나이가 다르면 false
if(this.나이 != other.나이) {
return false;
}
// 위 세가지 조건을 모두 통과하면 true
return true;
}
}
박싱
: 기본 타입 데이터에 대응하는 Wrapper
클래스로 만드는 동작언박싱
: Wrapper
클래스에서 기본 타입으로 변환//기본 타입 -> Wrapper 클래스
int -> Integer
long -> Long
float -> Float
double -> Double
// Auto Boxing
int i = 10;
Integer iObj = i;
// Auto UnBoxing
Integer iObj = new Integer(10);
int i = iObj;
class Number {
static int num1 = 0;
int num2 = 0;
}
class Main {
public static void main(String[] args) {
Number A = new Number();
Number B = new Number();
A.num1++;
A.num2++;
B.num1++;
B.num2++;
System.out.println(A.num1); // 출력 : 2
System.out.println(A.num2); // 출력 : 1
System.out.println(B.num1); // 출력 : 2
System.out.println(B.num2); // 출력 : 1
// num1은 static 변수이므로 객체에서 공통으로 접근 가능하다.
// 즉, A.num1 과 B.num1 은 공통된 static 변수를 가지므로 똑같은 값이다.
// num2는 인스턴스 변수이므로 각각의 객체마다 고유한 값을 가진다.
}
}
a저장소1
은 getter()
, setter()
실행 시 Integer,int
타입의 값만 받을 수 있다.a저장소2
는 getter()
, setter()
실행 시 Double,double
타입의 값만 받을 수 있다.a저장소3
은 getter()
, setter()
실행 시 사과
타입의 값만 받을 수 있다.
class Main {
public static void main(String[] args) {
저장소<Integer> a저장소1 = new 저장소<>();
a저장소1.setData(30);
int a = a저장소1.getData();
System.out.println(a);
저장소<Double> a저장소2 = new 저장소<>();
a저장소2.setData(5.5);
double b = a저장소2.getData();
System.out.println(b);
저장소<사과> a저장소3 = new 저장소<>();
a저장소3.setData(new 사과());
사과 c = a저장소3.getData();
System.out.println(c);
}
}
class 저장소<T> {
Object data;
T getData() {
return (T)data;
}
void setData(T inputedData) {
this.data = inputedData;
}
}
class 사과 {
}
class
sc.nextInt()
: 입력값으로 숫자만 받을 수 있다.InputMismatchException
예외 발생sc.nextLine()
sc.nextInt()
는 \n(엔터키)
이전 숫자만 입력 받기 때문에 버퍼에 \n
이 남아있게 된다.\n
을 입력값으로 받아버림.sc.nextLine()
을 실행시켜 버퍼에 남은 \n
을 제거한다.InputMismatchException
sc.close()
import java.util.InputMismatchException;
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int input = 0;
while ( true ) {
System.out.printf("숫자 : ");
try {
input = sc.nextInt(); // 대기, 숫자 하나 입력될 때 까지
sc.nextLine(); // 버퍼를 비운다.
break;
}
catch ( InputMismatchException e ) {
sc.nextLine(); // 버퍼를 비운다.
System.out.println("숫자를 입력해주세요.");
}
}
System.out.printf("입력된 숫자 : %d\n", input);
sc.close();
}
}