[백기선 자바] 클래스

[백기선 자바] 클래스

작성일자
Jun 29, 2023
태그
SUB PAGE
프로젝트
백기선 자바
책 종류

[자바 라이브 스터디] 5주차 - 클래스

  • 목표) 자바가 제공하는 제어문을 학습합니다.
    • 5주차 과제: 클래스
    • 클래스는 공식 문서 보고 키워드 사용법 제대로 이해하고 새롭게 업데이트 된 부분 공부하는 데에 초점 맞추기

1. 클래스 정의하는 방법

  • 정의) 객체를 생성하기 위한 틀
    • 데이터와 함수의 결합
    • 사용자 정의 타입
  • 특징)
    • 접근지정자
      • 클래스 내부
        동일 패키지
        하위 클래스
        그 외 영역
        public
        O
        O
        O
        O
        protected
        O
        O
        O
        X
        default (생략 가능)
        O
        O
        X
        X
        private
        O
        X
        X
        X
    • 선언 위치에 따른 변수 종류
      • 멤버 변수
        • 인스턴스 변수
          • 각 인스턴스마다 고유한 값 가짐
        • 클래스(static) 변수
          • 모든 인스턴스에 공통된 값 유지해야 한다면 static 붙여서 사용
          • 클래스이름.클래스변수 형식으로 사용 (객체생성 전 사용 가능)
      • 멤버 변수의 초기화
        • 정의) 지역변수와 달리 초기화 안 한 채 사용해도 컴파일 에러 x
          • 타입의 기본값으로 초기화됨
        • 종류)
            1. 명시적 초기화 → 변수 선언과 동시에 초기화
            1. 생성자
            1. 초기화 블럭
                • 클래스 초기화 블럭 → 클래스 변수의 복잡한 초기화에 사용됨
                  • 클래스가 메모리에 처음 로딩될 때 한번만 수행됨
                  • 인스턴스 초기화 블럭 → 인스턴스 변수의 복잡한 초기화에 사용됨
                    • 생성자와 같이 인스턴스 생성할 때마다 수행됨(생성자보다 먼저 수행됨)
                      • 사용)
                        • 모든 생성자에 공통으로 수행되어야 하는 문장들을 있을 때
                        • 배열이나 예외처리와 같이 복잡한 초기화 작업해야 할 때
                      • 장점) 재사용성 높이고 중복 제거함 → 객체지향프로그래밍적 요소
          • 클래스 명명 규칙

          2. 객체 만드는 방법 (new 키워드 이해하기)

          • 객체
            • 방법)
            • 객체 배열
              • 방법 1)
                • 방법 2)

                3. 메소드 정의하는 방법

                • 정의)
                  • 특징)
                    • 매개변수
                      • 기본형 매개변수 (read only) → 값 복사
                      • 참조형 매개변수 (read & write) → 주소 복사
                    • 반환타입
                      • 참조형 반환타입 →객체의 주소를 반환
                    • static(클래스) 메서드와 인스턴스 메서드
                      • 인스턴스 메서드
                        • 인스턴스 변수를 필요로 하는 메서드
                      • static 메서드
                        • 인스턴스와 관계 없는(인스턴스 변수나 메서드를 사용하지 않는) 메서드에 보통 사용함
                        • 예시) Math 클래스의 메서드는 모두 static 메서드임
                      • 특징)
                        • static 메서드는 static 변수처럼, 객체 생성하지 않고도 클래스이름.메서드이름(매개변수) 꼴로 호출 가능
                        • 같은 클래스 내의 메서드끼리 서로 호출가능하지만, static 메서드는 같은 클래스 내의 인스턴스 메서드 호출 불가
                    • JVM 구조
                      • 메서드 호출되면, 스택 영역에 메서드를 위한 메모리 할당됨
                      • 메서드가 작업 수행하는 동안, 지역변수들과 연산 중간경로 등 저장함
                      • 메서드가 작업 마치면, 할당되었던 메모리 공간은 반환되어 비워짐
                      • 예시)
                        • a()를 실행하다 b()를 실행하면, 스택에서 a()의 작업 공간 바로 위해 b()의 작업 공간 생김
                        • b() 수행 마치면, 제공되었던 스택의 메모리 공간이 반환되고, a()가 다시 수행 계속 하게 됨
                        • 이때, b()의 반환값은 대기상태에 있던 a()한테 넘겨줌
                    • 오버로딩
                      • 정의) 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것
                        • 이름 같아도 매개변수의 개수 또는 타입이 다르면 정의 가능
                        • 반환 타입은 아무 영향 x
                      • 특징)
                        • 이름 짓기 편하고 같은 기능 한단 거 예측하기 쉬움
                        • 가변인자
                          • 정의) 매개 변수 개수를 동적으로 지정하는 기능
                            • 타입… 변수명 형태로 매개변수 중 가장 마지막에 선언

                  4. 생성자 정의하는 방법

                  • 정의) 인스턴스 (변수) 초기화 메서드
                    • 특징)
                      • 생성자가 호출되는 시점
                        • 연산자 new에 의해 메모리에 클래스의 인스턴스가 생성된 후,
                        • 생성자가 호출되어 실행되고,
                        • 연산자 new의 결과로 생성된 인스턴스의 주소가 반환되어 참조변수에 저장됨
                      • 기본 생성자가 추가되는 시점
                        • 컴파일할 때, 소스파일(.java)의 클래스에 생성자가 하나도 정의되지 않은 경우 컴파일러가 자동적으로 기본 생성자 추가해 컴파일함

                    5. this 키워드 이해하기

                    • this
                      • 정의) 인스턴스 자신을 가리키는 참조변수
                        • 인스턴스의 주소가 저장되어 있음
                        • 생성자 포함한 모든 인스턴스 메소드에 지역변수로 숨겨진채로 존재함
                      • 사용)
                        • 생성자의 매개변수로 선언된 변수 이름이 인스턴스 변수이름과 같은 경우 이름만으로 두 변수 서로 구별 안되기에 인스턴스 변수 앞에 this를 사용해 구별
                      • 특징)
                        • this를 사용할 수 있는 것은 인스턴스 멤버뿐.
                        • static 메서드에선 this 사용 불가
                    • this()
                      • 정의) 같은 클래스의 다른 생성자 호출할 때 사용하는 생성자
                      • 조건)
                        • 호출할 때 다른 생성자 이름으로 클래스이름 대신 this 사용
                        • 다른 생성자 호출은 반드시 첫 줄에서만 가능
                          • 다른 생성자에서 매개 변수 초기화하면 현재 생성자의 매개 변수 초기화가 의미 없어질 수 있어서
                      • 장점)
                        • 코드 더 간략하게 할 수 있음
                          • 서로 관계가 깊은 경우가 많아 유기적으로 연결해주면 더 좋은 코드 얻을 수 있음
                          • 수정 필요할 때 적은 코드만 변경하면 되어 유지보수 쉬움
                          •  
                      [백기선 자바] 클래스