TIL : 221114

JINSEON YE·2022년 11월 14일

TIL

목록 보기
11/88

해쉬

데이터를 다루는 기법 중에 하나로 데이터의 검색과 저장이 아주 빠르게 진행된다.
딕셔너리 = 해쉬테이블

JAVA

산술연산자

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)

어떠한 작업을 수행하는 코드를 하나로 묶어 놓은 것

  • 메소드가 필요한 이유
    1. 재사용성
    • 메소드를 만들어 놓으면 이후 반복적으로 재사용이 가능합니다. 물론, 다른 프로그램에서도 사용이 가능하죠.
    1. 중복된 코드 제거
    • 프로그램을 작성하다보면 같은 코드가 여러번 반복되어 작성되곤 합니다. 이럴 때, 메소드를 활용하면 중복된 부분을 없애므로 보다 효율적인 코드가 됩니다.
    1. 프로그램 구조화
    • 구조화에 대해서는 아래 예시를 보면서 이해를 할 수 있습니다.
  1. 동사로 시작해야한다.
  2. camel case로 작성해야한다. (첫 단어는 소문자로, 이후 단어의 구분에 따라서 첫 글자만 대문자인 단어가 이어집니다. 중간에 띄어쓰기나 특수문자는 들어가지 않습니다.)
반환타입 메소드이름 (타입 변수명,타입 변수명, ...){ 
    수행되어야 할 코드
}

생성자(constructor)

인스턴스가 생성될 때 사용되는 '인스턴스 초기화 메소드'
즉, new 와 같은 키워드로 해당 클래스의 인스턴스가 새로 생성될 때, 자동으로 호출되는 메소드
인스턴스 변수를 초기화 하는 용도

클래스이름 (타입 변수명, 타입 변수명, ...){
    인스턴스 생성 될 때에 수행하여할 코드
    변수의 초기화 코드
}
  1. 생성자의 이름은 클래스명과 같아야 한다.
  2. 생성자는 리턴 값이 없다.

상속(inheritance)

상속이란 기존의 클래스를 재사용하는 방식 중의 하나
한 번 작성한 코드가 재사용이 필요하다면, 변경사항만 코드로 작성하므로 상대적으로 적은 양의 코드를 작성할 수 있게 됩니다.
상속을 통해 클래스간의 계층구조를 만들게 됩니다.

  • 상속의 특징
    1. 부모 클래스로에서 정의된 필드와 메소드를 물려 받습니다.
    2. 새로운 필드와 메소드를 추가할 수 있습니다.
    3. 부모 클래스스에서 물려받은 메소드를 수정할 수 있습니다.
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 추상메서드명();
}
  • 인터페이스 vs 추상클래스
    • 인터페이스
    1. 구현하려는 객체의 동작의 명세
    2. 다중 상속 가능
    3. implements를 이용하여 구현
    4. 메소드 시그니처(이름, 파라미터, 리턴 타입)에 대한 선언만 가능
    • 추상클래스
    1. 클래스를 상속받아 이용 및 확장을 위함
    2. 다중 상속 불가능 , 단일 상속
    3. extends를 이용하여 구현
    4. 추상메소드에 대한 구현 가능
profile
백엔드 개발자

0개의 댓글