Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

java-basic

1장. 클래스와 데이터

  • 생성자를 통해 변수에 객체를 할당하는 과정
  • 실제로 변수에는 인스턴스가 아닌 참조값이 들어간다는 걸 명심
Student student = new Student(); // 1. Student 객체 생성
Student student = x001; // 2. new Student()의 결과로 x001 참조값 반환
student1 = x001; // 3. 최종 결과

2장. 기본형과 참조형

  • 기본형
    • int, long, double, boolean처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입
    • 모두 소문자로 시작, 클래스는 대문자로 시작
    • null을 할당할 수 없음
  • 참조형
    • Student와 같이 데이터에 접근하기 위한 참조를 저장하는 데이터 타입
  • 변수대입
    • 자바는 항상 변수의 값을 복사해서 대입
  • 메서드 호출
    • 매개변수에 값을 전달할 때도 변수의 값을 복사해서 전달
  • 변수의 값 초기화
    • 멤버 변수는 자동 초기화
    • 지역 변수는 수동 초기화

4장. 생성자

  • 객체 생성 후 객체를 초기화하기 위한 특별한 메서드
  • 장점
    • 중복 호출 제거
      • 생성 직후 초기화를 위한 메서드를 실행하지 않아도 됨
    • 필수값 입력 보장 가능
  • 기본 생성자
    • 매개변수가 없는 생성자
    • 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 자동으로 추가
    • 생성자가 하나라도 있으면 자바는 기본 생성자를 만들지 않음
  • Recursive constructor call
    • 생성자에서 자기 자신을 호출하거나 다른 생성자를 호출했는데 다시 원래 생성자를 호출하는 경우
    • 해결 방법
      • 생성자 호출이 자기 자신을 반복하지 않도록 구조 수정
      • 생성자 체이닝 시 종료 지점을 반드시 만들기

5장. 패키지

  • 패키지 규칙
    • 패키지의 이름과 위치는 폴더 위치와 같아야 함 (필수)
    • 패키지 이름은 모두 소문자로 시작 (관례)
    • 패키지 이름의 앞 부분에는 일반적으로 회사의 도메인 이름을 거꾸로 사용 (관례)
      • com.companyname.myapp

6장. 접근 제어자

  • 접근 제어자 세부 사항
    • private
      • 나의 클래스 안으로 속성과 기능을 숨길 때 사용
      • 외부 클래스에서 해당 기능을 호출할 수 없음
    • default
      • 나의 패키지 안으로 속성과 기능을 숨길 때 사용
      • 외부 패키지에서 해당 기능 호출할 수 없음
    • protected
      • 상속 관계로 속성과 기능을 숨길 때 사용
      • 상속 관계가 아닌 곳에서 해당 기능 호출할 수 없음
    • public
      • 기능을 숨기지 않고 어디서든 호출할 수 있게 공개
  • 클래스 레벨의 접근 제어자 규칙
    • 클래스는 public 또는 default만 가능
    • public 클래스는 반드시 파일 이름과 동일해야 함
    • public 클래스는 반드시 하나만 존재해야 함
    • default 클래스는 무한정 존재할 수 있음
  • 캡슐화
    • 데이터를 숨겨라
    • 꼭 필요한 기능 제외 나머지 기능은 숨겨라

7장. 자바 메모리 구조와 static

  • 자바 메모리 구조
    • 메서드 영역
      • 프로그램을 실행하는데 필요한 공통 데이터 관리
      • 클래스 정보, 상수, static 변수 저장
    • 스택 영역
      • 자바 실행 시 하나의 스택 영역이 생성
      • 각 스택 프레임은 지역 변수, 중간 연산 결과, 메서드 호출 정보 등을 포함
      • 스택 프레임이란 메서드를 호출할 때마다 생성되는 메모리 블록
    • 힙 영역
      • 객체와 배열이 생성되는 영역
      • GC(가비지 컬렉션)에 의해 관리
  • static 변수
    • 인스턴스와 무관하게 클래스에 바로 접근해서 사용 가능
    • 클래스 자체에 소속되어 있어 클래스 변수라고도 함
    • 클래수 변수는 자바 프로그램을 시작할 때 딱 1개가 만들어짐
    • 인스턴스와 다르게 보통 여러 곳에서 공유하는 목적으로 사용
    • 정적 메서드가 인스턴스의 기능을 사용할 수 없는 이유
      • 정적 메서드는 클래스의 이름을 통해 바로 호출 가능
      • 그래서 인스턴스처럼 참조값의 개념이 없음
      • 그렇기 때문에 인스턴스의 기능을 사용할 수 없음
    • 정적 메서드 활용
      • 객체 생성이 필요 없이 메서드의 호출만으로 필요한 기능을 수행할 때 사용
      • 유틸리티성 메서드
        • 유틸리티성 메서드만 있는 클래스의 경우, 생성자를 private로 선언하여 인스턴스 생성을 막는 것이 일반적

8장. final

  • 특정 변수의 값을 할당한 이후에 변경하지 않을 경우 사용하는 키워드
  • 코드 내에서 변경을 한다면 컴파일러가 오류를 발생시킴

9장. 상속

  • 기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해줌
  • 상속 사용을 위해서는 extends 키워드를 사용
  • 클래스 계층 구조가 복잡해지는 걸 막기 위해 Java에서는 단일 상속만 지원
  • 이를 해결하기 위해 인터페이스의 다중 구현을 허용
  • 상속과 메모리 구조
    • 상속 관계의 객체를 생성하면 그 내부에는 부모와 자식이 모두 생성된다
    • 상속 관계의 객체를 호출할 때, 대상 타입을 정해야 함. 이 때 호출자의 타입을 통해 대상 타입을 찾음.
    • 현재 타입에서 기능을 찾지 못하면 상위 부모 타입으로 기능을 찾아서 실행. 기능을 찾지 못하면 컴파일 오류 발생
  • 오버라이딩
    • 부모의 기능을 자식이 재정의할 경우 사용
    • 애노테이션을 통해 오버라이딩을 명시할 수 있음
  • 오버로딩과 오버라이딩
    • 메서드 오버로딩
      • 메서드 이름이 같고 매개변수가 다른 메서드를 여러 개 정의하는 것
    • 메서드 오버라이딩
      • 하위 클래스에서 상위 클래스의 메서드를 재정의하는 것
  • 생성자
    • 상속 관계의 생성자 호출은 결과적으로 부모에서 자식 순서로 실행
    • 부모 데이터 초기화 후 자식 데이터 초기화
    • 상속 관계에서 자식 클래스의 생성자 첫줄에 반드시 super()가 있어야 함
    • 기본 생성자의 경우 생략 가능
  • 클래스와 메서드에 사용되는 final
    • 상속 및 오버라이딩 제한
      • final 클래스는 상속할 수 없음
      • final 메서드는 오버라이딩할 수 없음

10장. 다형성

  • 다형성
    • 한 객체가 여러 타입의 객체로 취급될 수 있는 능력
  • 다형적 참조: 하나의 변수 타입으로 다양한 자식 인스턴스를 참조할 수 있는 기능
    • 부모는 자식을 품을 수 있다는 점
    • 캐스팅
      • 업캐스팅: 부모 타입으로 변경
        • 위로만 타입을 변경하는 업캐스팅의 경우 부모, 자식의 인스턴스가 모두 생성되기 때문에 안전
        • 캐스팅 생략 가능
      • 다운캐스팅: 자식 타입으로 변경
        • 인스턴스에 존재하지 않는 하위 타입으로 캐스팅하는 문제 발생 가능
  • 메서드 오버라이딩: 기존 기능을 하위 타입에서 새로운 기능으로 정의

11장. 다형성2

  • 추상 클래스
    • 부모 클래스는 제공하나, 실제로 생성되면 안 되는 클래스
  • 추상 메서드
    • 자식 클래스가 반드시 오버라이딩 해야 하는 메서드를 부모 클래스에 정의 가능
    • 이를 추상 메서드라고 함
    • 추상 메서드가 하나라도 있는 클래스는 추상 클래스로 선언해야 함
    • 모든 메서드가 추상 메서드인 경우, 이를 순수 추상 클래스라고 함
  • 인터페이스
    • 순수 추상 클래스를 구현하기 위한 기능
    • 순수 추상 클래스 특징
      • 인스턴스 생성 불가
      • 상속시 모든 메서드 오버라이딩 필요
      • 다형성을 위해 사용
    • 인터페이스 특징
      • 순수 추상 클래스 특징 포함
      • 메서드는 모두 public, abstract
      • 메서드 위 접근제어자 생략 권장
      • 다중 구현 지원
    • 인터페이스 사용 이유
      • 인터페이스를 구현하는 곳에서 인터페이스의 메서드를 반드시 구현하라는 제약을 주는 것
      • 순수 추상 클래스를 사용한다면 미래에 누군가 실행 가능한 메서드를 끼워넣을 수도 있음
    • 클래스, 추상 클래스, 인터페이스는 프로그램 코드, 메모리 구조상 모두 똑같음

12장. 다형성과 설계

  • 역할과 구현을 분리
    • 자바 언어의 다형성을 활용
      • 역할 = 인터페이스
      • 구현 = 인터페이스를 구현한 클래스, 구현 객체
    • 객체를 설계할 때 역할과 구현을 명확히 분리
    • 객체 설계시 역할을 먼저 부여하고, 그 역할을 수행하는 객체 만들기 -다형성의 본질
      • 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경 가능
      • 다형성의 본질을 이해하기 위해서는 협력이라는 객체 사이의 관계에서 시작해야 함
      • 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있음
    • OCP
      • Open for extension: 새로운 기능의 추가나 변경 사항이 생겼을 때, 기존 코드는 확장할 수 있어야 한단
      • Closed for modification: 기존의 코드는 수정되지 않아야 한다
    • 전략 패턴
      • 가장 중요한 디자인 패턴중 하나
      • 알고리즘을 클라이언트 코드 변경 없이 쉽게 교체 가능
    • 팩토리 패턴 - PayMethodFactory
      • 인자로 실제 결제 수단 구현체를 찾음
      • 결제 수단을 찾지 못했을 때 null 대신에 항상 실패하는 결제 수단을 반환

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages