Object Oriented Programming
(다들 아실테니까 생략)
OOP is APIE
Abstraction(추상화): 현실의 개념을 프로그램 상의 객체로 간추려서 표현
Polymorphism(다형성)
Inheritance(상속)
Encapsulation(데이터 은닉과 보호): 연관있는 데이터와 행위를 하나로 묶는 것(변수와 메서드 활용)
외부 객체에 구현 내용을 숨기는 것(접근제한자 활용)
public class Rapper {
String name;
void rap(){}
void hustle(){}
boolean hasAlbum;
boolean hasJeongGyu;
}
public class Swings extends Person {
boolean isDonKatsu;
boolean hasItsOwnBusiness;
boolean hasMyeongBan;
void benchPress(){}
}
public class Noel extends Person {
boolean DriversLicense;
boolean hasMyeongBan;
}
public class YoungB extends Person {
boolean pants;
boolean hasMyeongBan;
void concertSoldOut(){}
}@Override
오버라이딩(재정의)
----- 부록 -----
해시 함수(Hash Function)는 입력 데이터를 일정한 길이의 고정된 크기의 값으로 매핑하는 함수입니다. 해시 함수는 컴퓨터 과학과 암호학에서 매우 중요한 역할을 하며, 다양한 응용 분야에서 사용됩니다. 대표적으로는 데이터 검색, 데이터 무결성 검사, 데이터 압축, 암호화, 데이터베이스 인덱싱 등이 있습니다. 이 설명에서는 해시 함수의 기본 개념, 특징, 다양한 유형, 사용 사례, 장단점 등을 다루겠습니다.
해시 함수는 임의의 길이의 입력 데이터(키라고 부름)를 고정된 길이의 해시 값(또는 해시 코드, 다이제스트)으로 변환합니다. 해시 값은 일반적으로 2진수로 표현되며, 해시 함수는 동일한 입력에 대해 항상 동일한 해시 값을 반환합니다.
해시 함수는 사용 목적에 따라 여러 유형으로 나뉩니다. 주요 해시 함수 유형에는 다음이 포함됩니다.
암호학적 해시 함수는 보안 요구 사항을 충족하기 위해 설계된 해시 함수입니다. 주요 특징으로는 단방향성, 충돌 저항성, 제2 프리이미지 저항성 등이 있습니다.
비암호학적 해시 함수는 보안보다는 빠른 해시 계산이 중요한 경우에 사용됩니다. 주로 데이터베이스, 해시 테이블, 체크섬 등에 사용됩니다.
해시 함수는 다양한 분야에서 사용됩니다. 몇 가지 주요 사용 사례는 다음과 같습니다.
해시 함수는 해시 테이블의 핵심 요소로, 키-값 쌍을 저장하고 검색하는 데 사용됩니다. 해시 테이블은 빠른 검색 속도를 제공하며, 이는 데이터베이스 인덱싱, 캐시, 심볼 테이블 등에 유용합니다.
해시 함수는 파일이나 메시지의 무결성을 검증하는 데 사용됩니다. 예를 들어, 파일을 다운로드할 때, 파일의 해시 값을 비교하여 파일이 손상되었는지 확인할 수 있습니다.
암호학적 해시 함수는 디지털 서명 및 인증에서 중요한 역할을 합니다. 디지털 서명은 데이터의 무결성과 출처를 보장하며, 해시 함수를 사용하여 데이터의 다이제스트를 생성하고 서명합니다.
사용자 비밀번호를 해시 값으로 저장하여 보안을 강화합니다. 비밀번호는 평문으로 저장되지 않고, 해시 값을 비교하여 인증합니다. 솔트(salt)와 결합하여 해시 값을 생성하여 사전 공격을 방지합니다.
해시 함수는 현대 컴퓨터 과학과 암호학에서 필수적인 도구입니다. 해시 함수는 데이터의 무결성을 유지하고, 효율적인 데이터 검색을 가능하게 하며, 보안성을 강화하는 데 중요한 역할을 합니다. 다양한 해시 함수가 존재하며, 각각의 특성과 용도에 따라 적절한 해시 함수를 선택하여 사용하는 것이 중요합니다.

개인적으로는 첫 프로젝트 당시 해시함수를 사용해본 적이 있습니다.
보통 비밀번호 암호화할 때 많이 쓰임.