<TIL> 37. java/ 객체지향 부족한 개념 정리

YUJIN LEE·2023년 3월 1일
0

개발log

목록 보기
32/149

변수의 종류를 결정짓는 중요한 요소 -> 변수의 선언 위치.

멤버변수를 제외한 나머지 변수는 모두 지역 변수.

멤버변수 중 static이 붙은 것은 클래스 변수(공유 변수), 붙지 않은 것은 인스턴스 변수

지역변수는 클래스 영역 이외의 영역에서 선언

인스턴스 변수는 독립적인 저장공간을 가진다.

고우한 상태를 유지해야하는 속성의 경우, 인스턴스 변수로 선언

클래스 변수 선언은 인스턴스 변수 앞에 static을 붙이면 된다.

클래스 변수는 모든 인스턴스가 공통된 저장공간 공유

한 클래스의 모든 인스턴스들이 공통된 값을 유지해야하는 속성의 경우, 클래스 변수로 선언

클래스 변수는 인스턴스를 생성하지 않고 언제라도 바로 사용할 수 있다.
클래스이름.클래스 변수와 같은 식으로 사용

지역변수는 메서드 내에 선언되어 메서드 내에서만 사용 가능. 메서드 종료되면 소멸.

호출스택

  • 메서드가 호출되면 수행에 필요한 만큼 메모리를 스택에 할당
  • 메서드가 수행을 마치고 나면 사용했던 메모리를 반환하고 스택에서 제거
  • 호출스택의 제일 위에 있는 메서드가 현재 실행중인 메서드
  • 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드

static을 언제 붙여야 할까?
1. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static
2. 클래스 변수(static변수)는 인스턴스를 생성하지 않아도 사용가능.
3. 클래스 메서드(static 메서드)는 인스턴스 변수를 사용할 수 없다.
4. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것 고려.

  • 클래스의 멤버변수 중 모든 인스턴스에 공통된 값을 유지해야하는 것이 있는지 살펴보고 있으면, static을 붙여준다
  • 작성한 메서드 중 인스턴스 변수나 인스턴스 메서드를 사용하지 않는 메서드에 static을 붙일 것을 고려.
  • static을 붙이면 메서드 호출시간이 짧아지므로 성능 향상

생성자 - 인스턴스 초기화 메서드
생성자의 이름은 클래스 이름과 같고, 리턴값 x

this - 참조변수로 인스턴스 자신을 가리킴. 인스턴스 주소가 저장되어있다.
this(), this(매개변수) - 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용

초기화 블럭 - 클래스 초기화 블럭, 인스턴스 초기화 블럭
인스턴스 초기화 블럭은 클래스 내 {} 안에 코드 작성.
클래스 초기화 블럭은 static{}안에 코드 작성

클래스를 만들 때 ~은 ~이다. 라는 문장이 성립한다면, 상속관계를 맺어준다
~은 ~를 가지고 있다 는 문장이 성립한다면 포함관계를 맺어준다.

자바에서는 단일 상속만을 허용.

조상클래스로부터 상속받은 메서드의 내용을 변경하는 것 - 오버라이딩

조상클래스의 메서드를 자손 클래스에서 오버라이딩 할 때
1. 선언부가 조상 클래스의 메서드와 일치
2. 접근제어자를 조상클래스의 메서드보다 좁은범위로 변경x
3. 예외는 조상 클래스의 메서드보다 많이 선언 불가.

오버로딩 - 기존에 없는 새로운 메서드 정의
오버라이딩 - 상속받은 메서드 내용 변경

패키지 - 클래스의 묶음. 클래스 OR 인터페이스를 포함시킬 수 있다.

get으로 시작하는 메서드는 단순히 멤버변수의 값을 반환하는 일을 하고,
set으로 시작하는 메서드는 매개변수에 지정된 값을 검사하여 조건에 맞는 값일 때만 멤버변수의 값을 변경하도록 작성.
보통 멤버변수의 값을 읽는 메서드의 이름 - get멤버변수이름
멤버변수의 값을 변경하는 메서드의 이름 - set멤버변수 이름

추상클래슨느 부분적으로만 완성된 미완성 설계도라고 한다면, 인터페이스는 구현된 것이 아무것도 없고 밑그림만 그려져 있는 기본 설계도라고 할 수 있다.

인터페이스의 멤버들은 제약사항이 존재

  • 모든 멤버변수는 public static final -> 생략 가능.
  • 모든 메서드 public abstract -> 생략가능 (단, static메서드와 default 메서드 예외)

인터페이스는 인터페이스로만 상속 받을 수 있다.
클래스와는 달리 다중상속 가능.

클래스는 확장한다는 의미의 extends를 사용,
인터페이스는 구현한다의 의미인 implements를 사용.

인터페이스의 장점
1. 개발시간을 단축시킬 수 있다.
2. 표준화 가능
3. 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.
4. 독립적인 프로그래밍이 가능

내부 클래스의 장점

  • 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근 할 수 있다.
  • 코드의 복잡성을 줄일 수 있다.(캡슐화)
profile
인정받는 개발자가 되고싶습니다.

0개의 댓글