해쉬
데이터를 다루는 기법 중에 하나로 데이터의 검색과 저장이 아주 빠르게 진행된다.
딕셔너리 = 해쉬테이블
산술연산자
System.out.println(num1 + num2); // 더하기 연산
System.out.println(num1 - num2); // 빼기 연산
System.out.println(num1 * num2); // 곱하기 연산
System.out.println(num1 / num2); // 나누기 연산
System.out.println(num1 % num2); // 나머지 연산
대입연산자
num1 += num2; // num1 = num1 + num2
num1 -= num2; // num1 = num1 - num2
num1 = num2; // num1 = num1 num2
num1 /= num2; // num1 = num1 / num2
num1 %= num2; // num1 = num1 % num2
관계연산자
System.out.println(num1 > num2);
System.out.println(num1 >= num3);
System.out.println(num1 < num2);
System.out.println(num1 <= num2);
System.out.println(num1 == num3);
System.out.println(num1 != num2);
논리연산자
System.out.println(a && b);
// and 조건
System.out.println(a || b);
// or 조건 (true 우선)
System.out.println(!b);
// not 조건 (반대로)
switch 문
switch (입력 변수){
case 입력값1 : 실행 구문
break;
case 입력값2 : 실행 구문
break;
case 입력값3 : 실행 구문
break;
default: 기본 실행 구문
break;
}
default : 아무것도 해당 안 될 때.
break문을 넣어서 빠져나오게 해줘야함.
삼항연산자
int a = 5;
String reuslt = (a < 10) ? "10보다 작습니다." : "10보다 큽니다.";
System.out.println(reuslt);
총 3항으로 구성.
? 앞의 조건이 True 이면 : 앞의 문장이 출력, False 이면 : 뒤의 문장이 출력.
for문
for(초기값 ; 조건식 ; 증감식){
실행 코드 블럭
}
for - each문
for (String day : days) {
System.out.println(day);
}
배열이 있는 경우, 배열의 값들을 하나하나 변수에 담아서 출력
while문
while(조건식){
실행 코드 블럭
}
int i = 0;
int sum = 0;
while (i < 10) {
sum += i + 1;
i += 1;
}
System.out.println(sum);
countinue : 아래의 코드를 실행하지 않고 다시 반복문의 시작 부분으로 돌아가는 것
do-while문
일단 코드 블럭을 무조건 한번 실행한 후, while문의 조건을 비교
클래스(Class)
표현하고자 하는 대상의 공통 속성을 한 군데에 정의해 놓은 것 / 객체의 속성을 정의해 놓은 것. ex) 붕어빵 틀
인스턴스(Instance)
어떠한 클래스로부터 만들어진 객체 ex) 붕어빵
메소드(method)
어떠한 작업을 수행하는 코드를 하나로 묶어 놓은 것
반환타입 메소드이름 (타입 변수명,타입 변수명, ...){
수행되어야 할 코드
}
생성자(constructor)
인스턴스가 생성될 때 사용되는 '인스턴스 초기화 메소드'
즉, new 와 같은 키워드로 해당 클래스의 인스턴스가 새로 생성될 때, 자동으로 호출되는 메소드
인스턴스 변수를 초기화 하는 용도
클래스이름 (타입 변수명, 타입 변수명, ...){
인스턴스 생성 될 때에 수행하여할 코드
변수의 초기화 코드
}
상속(inheritance)
상속이란 기존의 클래스를 재사용하는 방식 중의 하나
한 번 작성한 코드가 재사용이 필요하다면, 변경사항만 코드로 작성하므로 상대적으로 적은 양의 코드를 작성할 수 있게 됩니다.
상속을 통해 클래스간의 계층구조를 만들게 됩니다.
class Animal{}
class Dog extends Animal{}
class Cat extends Animal{}
오버로딩(overloading)
한 클래스 내에 동일한 이름의 메소드를 여러개 정의하는 것
오버로딩의 조건
→ 메소드 이름이 동일해야 합니다.
→ 매개변수의 개수 혹은 타입이 달라야 합니다.
아예 새로운 메소드!
오버라이딩(overriding)
→ 부모 클래스로부터 상속받은 메소드의 내용을 변경하는 것
→ 상속받은 메소드를 그대로 사용하기도 하지만, 필요에 의해 변경해야할 경우 오버라이딩을 합니다.
오버라이딩의 조건
→ 부모 클래스의 메소드와 이름이 같아야 합니다.
→ 부모 클래스의 메소드와 매겨변수가 같아야 합니다.
→ 부모 클래스의 메소드와 반환타입이 같아야 합니다.
자식이 부모를 이기는!
오버로딩 : 기존에 없는 새로운 메소드를 정의하는 것
오버라이딩 : 상속받은 메소드의 내용을 변경하는 것
접근 제어자 (access modifier)
멤버 변수/함수 혹은 클래스에 사용되며 외부에서의 접근을 제한하는 역할을 합니다.
→ private : 같은 클래스 내에서만 접근이 가능합니다
→ default(nothing) : 같은 패키지 내에서만 접근이 가능합니다.
→ protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능합니다.
→ public : 접근 제한이 전혀 없습니다.
(좁음) private → default → protected → public (넓음)
캡슐화(encapsulation)
객체의 속성(data fields)과 행위(methods)를 하나로 묶고, 실제 구현 내용 일부를 외부에 감추어 은닉한다.
은닉화는 캡슐화를 통해 얻어지는 "실제 구현 내용 일부를 외부에 감추는" 효과
추상클래스(abstract class)
추상클래스는 추상메소드를 선언할 수 있는 클래스를 의미합니다. 또한 추상클래스는 클래스와는 다르게 상속받는 클래스 없이 그 자체로 인스턴스를 생성할 수는 없습니다.
abstract 리턴타입 메소드이름();
인터페이스(Interface)
객체의 특정 행동의 특징을 정의하는 간단한 문법
인터페이스는 함수의 특징(method signature)인 접근제어자, 리턴타입, 메소드 이름만을 정의합니다. 함수의 내용은 없습니다. 인터페이스를 구현하는 클래스는 인터페이스에 존재하는 함수의 내용({} 중괄호 안의 내용)을 반드시 구현해야합니다.
interface 인터페이스명{
public abstract void 추상메서드명();
}