Post

TIL-20240425

TIL-20240425

2024-04-24

오늘의 학습 🌠


1

학습 내용 개념 정리 📃

  • 멤버 = 필드 + 메서드
    • 필드, 메서드는 선언하는 방법에 따라서 인스턴스 멤버와 클래스 멤버로 구분 가능

    • 인스턴스 멤버는 객체 생성 후에 사용 가능, 클래스 멤버는 객체 생성 없이도 사용 가능

  • 인스턴스 멤버
    • 객체 생성해야 사용 가능

    • 객체의 인스턴스 필드는 각각의 인스턴스 마다 고유하게 값을 가짐

  • 클래스 멤버
    • 클래스는 Java의 클래스 로더에 의해 메서드 영역에 저장되고 사용됨.
  • 클래스 멤버 선언
    • static 키워드 이용, 굳이 인스턴스화 시킬 필요 없음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package week03.sample;  
  
public class Main {  
  public static void main(String[] args) {  
     Main main = new Main();  
     System.out.println(main.getNumber());  
     System.out.println(main.getNumber());  
    }  public int getNumber(){  
  //지역변수 : 해당 메서드가 실행될 때마다 독립적인 값을 저장하고 관리  
  // 지역변수는 메서드 내부에서 정의될 때 생성됨  
  // 이 메서드가 종료될 때 소멸  
    int number = 1;  
    number+=1;  
    return number;  
    }
 }  
//전역변수(static)

  • 지역변수는 해당 메서드가 실행될 때마다 독립적인 값을 저장하고 관리하고 메서드 내부에서 정의될 때 생성, 또한 이 메서드가 종료될 때 소멸함.

  • final 필드와 상수
    • final 필드는 초기값이 저장되면 해당값을 프로그램이 실행되는 도중에는 절대로 수정 불가, final 필드는 반드시 초기값 지정 해야함.

    • 상수는 불변의 값, 보통 static final로 씀

  • 생성자
    • 객체가 생성될 때 호출되며 객체를 초기화 하는 역할
    • 모든 클래스는 반드시 생성자가 하나 이상 존재
  • 오버로딩
    • 똑같은 메서드 명을 사용하면서 매개변수의 종류에 따라 완벽하게 다른 기능 수행하게 하는 것
  • this
    • 이것, Java에서는 instance ‘자신’을 가리킴

    • 생성자를 선언할 때 매개변수명과 객체의 필드명이 동일할 경우 오류가 발생하지는 않지만 생성자 블록 내부에서 해당 변수들은 객체의 필드가 아닌 가장 가까운 매개변수명을 가리키게 됨으로 자기 자신에게 값을 대입하는 상황이 발생

    • 이럴 경우 this 키워드 사용하여 해결

    • this는 인스턴스 자신을 뜻하므로 객체의 메서드에서 리턴 타입이 인스턴스 자신의 클래스 타입이라면 this를 사용하여 인스턴스 자신의 주소를 반환할 수 있음

    • this() -> 생성자를 표현

      1
      2
      3
      
      class Car{
        Car() { }
      }
      
  • 여기서 Car가 this임.

  • 접근 제어자
    • 클래스, 변수, 메서드의 선언부에 부가적인 의미를 부여해줌

    • 접근 제어자 : public, protected, default, private
    • 그 외 제어자 : static, final, abstract

    • public : 접근 제한이 전혀 없음
    • protected : 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근 가능
    • default : 같은 패키지 내에서만 접근 가능
    • private : 같은 클래스 내에서만 접근 가능

    • 클래스 : public, default
    • 메서드 & 멤버변수 : public, protected, default, private
    • 지역변수 : 없음
  • 접근 제어자를 이용한 캡슐화(은닉성)

  • Getter, Setter
    • 직접적으로 값의 조회, 세팅을 방지하기 위해 Getter, Setter를 사용
    • Getter
      • 외부에서 객체의 private한 필드를 읽을 필요가 있을 때 Getter 메서드를 사용

      • 메서드 이름 규칙 : get + 필드이름(첫 글자 대문자)
      • GET은 변수값을 반환하는 목적이기 떄문에 return 이 필요
    • Setter
      • 외부에서 객체의 private한 필드를 저장/수정할 필요가 있을 때 Setter 메서드 사용
      • SET은 변수 값을 할당하는 목적의 함수이기 때문에 인자를 받아야 됨.
  • 상속
    • 상속의 키워드는 extends
1
2
public class 자식클래스 extends 부모클래스{	
}
  • 상속의 개념을 확장의 개념으로 이해해야 함!

    1. 부모 클래스에 새로운 필드와 메서드가 추가되면 자식 클래스는 이를 상속받아 사용할 수 있음
    1. 자식 클래스에 새로운 필드와 메서드가 추가되어드 부모 클래스는 어떠한 영향도 받지 않음.
    1. 따라서 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많음.

1

  • 클래스간의 관계
    • 상속관계 : is - a
      • 예시 : 고래는 포유류다.
    • 포함관계 : has - a
      • 예시 : 자동차는 타이어를 가지고 있다. 자동차는 차문을 가지고 있다.
  • Java는 기본적으로 다중 상속 허용 안 함
    • 한 부모는 자식 class를 여러 개 가질 수 있지만 자식 class는 여러 부모 class를 가질 수 없음

    • 이유 : 다중상속을 허용하면 클래스간의 관계가 복잡해짐
    • overriding : 부모로부터 내려받은 메서드를 재정의해서 사용하는 기법
    • 클래스에 final 키워드를 지정하여 선언하면 최종적인 클래스가 됨으로 더 이상 상속할 수 없는 클래스가 됨
  • Object 클래스는 Java 내 모든 클래스들의 최상위 부모 클래스

  • 오버라이딩
    • 부모클래스로부터 상속받은 메서드의 내용을 재정의 하는 것을 오버라이딩이라고 함.

      • 선언부가 부모 클래스의 메서드와 일치해야 함
      • 접근 제어자를 부모 클래스의 메서드보다 좁은 범위로 변경할 수 없음
      • 예외는 부모 클래스의 메서드 보다 많이 선언할 수 없음
  • super
    • 부모 클래스의 멤버를 참조할 수 있는 키워드
    • 1

추가 🕤


  • 오늘은 집중이 안 돼서.. 여기서 마무리 하겠습니다.

🐱‍🏍— —🤸🏻‍♀️ ~~~ 야~호~

This post is licensed under CC BY 4.0 by the author.