[Java 개념] 상속(1), 객체 지향 프로그래밍(OOP)

예세림·2024년 7월 19일

Java

목록 보기
2/12
post-thumbnail

1. OOP

Object Oriented Programming
(다들 아실테니까 생략)

객체지향 언어의 특징

OOP is APIE
Abstraction(추상화): 현실의 개념을 프로그램 상의 객체로 간추려서 표현
Polymorphism(다형성)
Inheritance(상속)
Encapsulation(데이터 은닉과 보호): 연관있는 데이터와 행위를 하나로 묶는 것(변수와 메서드 활용)
외부 객체에 구현 내용을 숨기는 것(접근제한자 활용)

상속(Inheritance)

  • 기존(상위) 클래스의 자산(멤버)을 자식(하위)클래스에서 재사용하기 위한 것.
    상위 클래스의 생성자와 초기화 블록은 상속하지 않는다.
  • 상위 클래스의 멤버를 물려 받기 때문에 코드의 절감
    상위 클래스의 코드 변경 시 모든 하위 클래스들에도 적용 -> 유지 보수성 향상
  • 상속의 적용
    extends 키워드 사용
    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(){}
    }

오버로딩 vs 오버라이딩

@Override
오버라이딩(재정의)

  • 반드시 상속 관계에 있을 때
  • 부모클래스에 정의되어 있는 메서드를 자식 클래스에서 재정의
  • 메서드의 이름, 반환형, 매개변수 동일!

----- 부록 -----

1-1. 해시함수(Hash Function)

해시 함수(Hash Function)는 입력 데이터를 일정한 길이의 고정된 크기의 값으로 매핑하는 함수입니다. 해시 함수는 컴퓨터 과학과 암호학에서 매우 중요한 역할을 하며, 다양한 응용 분야에서 사용됩니다. 대표적으로는 데이터 검색, 데이터 무결성 검사, 데이터 압축, 암호화, 데이터베이스 인덱싱 등이 있습니다. 이 설명에서는 해시 함수의 기본 개념, 특징, 다양한 유형, 사용 사례, 장단점 등을 다루겠습니다.

1. 해시 함수의 기본 개념

해시 함수는 임의의 길이의 입력 데이터(키라고 부름)를 고정된 길이의 해시 값(또는 해시 코드, 다이제스트)으로 변환합니다. 해시 값은 일반적으로 2진수로 표현되며, 해시 함수는 동일한 입력에 대해 항상 동일한 해시 값을 반환합니다.

예시

  • 입력: "hello"
  • 해시 함수: SHA-256
  • 출력: "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"

2. 해시 함수의 특징

  • 결정적: 동일한 입력에 대해 항상 동일한 출력 값을 반환합니다.
  • 효율성: 계산이 빠르고 효율적이어야 합니다.
  • 균등 분포: 해시 값이 고르게 분포되어야 합니다. 즉, 입력 값이 약간만 달라져도 해시 값은 크게 달라져야 합니다(이것을 해시 함수의 민감도 또는 해시 함수의 Avalanche 효과라고 합니다).
  • 비충돌성: 서로 다른 두 입력 값이 동일한 해시 값을 갖는 경우(충돌)가 최소화되어야 합니다.
  • 단방향성: 해시 값을 보고 원래 입력 값을 추정하기 어려워야 합니다.

3. 해시 함수의 유형

해시 함수는 사용 목적에 따라 여러 유형으로 나뉩니다. 주요 해시 함수 유형에는 다음이 포함됩니다.

3.1 암호학적 해시 함수(Cryptographic Hash Functions)

암호학적 해시 함수는 보안 요구 사항을 충족하기 위해 설계된 해시 함수입니다. 주요 특징으로는 단방향성, 충돌 저항성, 제2 프리이미지 저항성 등이 있습니다.

  • SHA-256: 가장 널리 사용되는 암호학적 해시 함수 중 하나입니다. 256비트 해시 값을 생성합니다.
  • SHA-3: SHA-2의 후속으로, 더 높은 보안 수준을 제공하는 해시 함수입니다.
  • MD5: 이전에 널리 사용되었으나, 충돌 저항성에 문제가 있어 현재는 보안 목적으로는 사용되지 않습니다.

3.2 비암호학적 해시 함수(Non-Cryptographic Hash Functions)

비암호학적 해시 함수는 보안보다는 빠른 해시 계산이 중요한 경우에 사용됩니다. 주로 데이터베이스, 해시 테이블, 체크섬 등에 사용됩니다.

  • MurmurHash: 빠르고 높은 품질의 해시 값을 생성하는 해시 함수입니다.
  • FNV-1: 간단하고 빠르며 해시 테이블에서 자주 사용되는 해시 함수입니다.
  • CityHash: 구글에서 개발한 해시 함수로, 대용량 데이터에 최적화되어 있습니다.

4. 해시 함수의 사용 사례

해시 함수는 다양한 분야에서 사용됩니다. 몇 가지 주요 사용 사례는 다음과 같습니다.

4.1 데이터 검색 및 해시 테이블

해시 함수는 해시 테이블의 핵심 요소로, 키-값 쌍을 저장하고 검색하는 데 사용됩니다. 해시 테이블은 빠른 검색 속도를 제공하며, 이는 데이터베이스 인덱싱, 캐시, 심볼 테이블 등에 유용합니다.

4.2 데이터 무결성 검사

해시 함수는 파일이나 메시지의 무결성을 검증하는 데 사용됩니다. 예를 들어, 파일을 다운로드할 때, 파일의 해시 값을 비교하여 파일이 손상되었는지 확인할 수 있습니다.

4.3 디지털 서명 및 인증

암호학적 해시 함수는 디지털 서명 및 인증에서 중요한 역할을 합니다. 디지털 서명은 데이터의 무결성과 출처를 보장하며, 해시 함수를 사용하여 데이터의 다이제스트를 생성하고 서명합니다.

4.4 비밀번호 저장

사용자 비밀번호를 해시 값으로 저장하여 보안을 강화합니다. 비밀번호는 평문으로 저장되지 않고, 해시 값을 비교하여 인증합니다. 솔트(salt)와 결합하여 해시 값을 생성하여 사전 공격을 방지합니다.

5. 해시 함수의 장단점

장점

  • 빠른 계산 속도: 해시 함수는 일반적으로 계산 속도가 매우 빠르며, 대량의 데이터를 효율적으로 처리할 수 있습니다.
  • 충돌 최소화: 좋은 해시 함수는 충돌이 매우 드물게 발생하여 데이터 무결성을 유지합니다.
  • 단방향성: 암호학적 해시 함수는 역방향 계산이 불가능하여 보안성을 높입니다.

단점

  • 충돌 가능성: 모든 해시 함수는 이론적으로 충돌이 발생할 수 있습니다. 이를 완전히 피할 수는 없습니다.
  • 비가역성: 단방향 해시 함수의 경우, 원래 데이터를 복구할 수 없기 때문에 비밀번호 분실 시 복구가 불가능합니다.
  • 민감도: 입력 값의 작은 변경이 큰 해시 값의 변화를 초래하므로, 데이터 일관성을 유지하는 데 주의가 필요합니다.

결론

해시 함수는 현대 컴퓨터 과학과 암호학에서 필수적인 도구입니다. 해시 함수는 데이터의 무결성을 유지하고, 효율적인 데이터 검색을 가능하게 하며, 보안성을 강화하는 데 중요한 역할을 합니다. 다양한 해시 함수가 존재하며, 각각의 특성과 용도에 따라 적절한 해시 함수를 선택하여 사용하는 것이 중요합니다.

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

0개의 댓글