기타

퀴즈 4차 오답노트

whyHbr 2024. 3. 15. 11:24
728x90
반응형

https://www.tcpschool.com/

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

접근 제어자:

private: 같은 패키지, 같은 클래스 내에서만 접근 가능, 그 외 전부 접근 불가

private접근 제어자를 사용하여 선언된 클래스 멤버는 외부에 공개되지 않으며, 외부에서는 직접 접근할 수 없다.

 

public : 다른 패키지, 다른 클래스에서 접근 가능

public 접근 제어자를 사용하여 선언된 클래스 멤버는 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있다.

 

protected: 상속 관계내 하위 클래스는 접근 가능. 다른 패키지라도 조건이 만족하면 접근 가능하다.

protected 멤버는 부모 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급된다. 

 

클래스의 protected 멤버에 접근할 수 있는 영역은 다음과 같다.

 

1. 이 멤버를 선언한 클래스의 멤버

2. 이 멤버를 선언한 클래스가 속한 패키지의 멤버

3. 이 멤버를 선언한 클래스를 상속받은 자식 클래스(child class)의 멤버

 

 

default : 같은 패키지 내에서만 가능하다. 기본 값이다. 멤버의 접근 제어의 기본값으로 default 접근 제어를 별도로 명시하고 있다. 같은 클래스의 멤버와 같은 패키지에 속하는 멤버에서만 접근할 수 있다.

 

static클래스를 설계할 때 해당 클래스의 모든 인스턴스가 공유하는 클래스 변수를 지정하기 위한 키워드

 

static 메서드는 프로그램 실행 중 해당 static 메서드가 선언된 클래스가 참조되는 시점에 메모리에 로딩된다. 만약 해당 클래스가 이전에 먼저 참조된 적이 있다면 호출되는 static 메소드는 이미 메모리에 로딩되어있다. 설령 해당 static 메소드가 그 클래스의 메소드 중 가장 먼저 호출되는 경우더라도 그 static 메소드를 호출하는 시점이라기 보다, 정확하게는 그 메소드를 호출하기 위해 클래스를 참조하는 시점에 로딩된다.  

클래스명.static메서드이름 과 같은 방식으로 접근 가능하다.

내부에서는 멤버변수에 접근할 수 없다.

멤버 메서드도 static 메서드를 호출할 수 있다.

 

JVM의 메모리 구조 RUNTIME DATA AREA

Runtime Data Area는 JVM이 프로그램을 수행하기 위해 OS로부터 할당받는 메모리이다.

 

PC register, stack, Native Method stack, Heap, Method Area

 

이렇게 다섯 구역으로 나뉜다. 

 

Pc register: 현재 실행중인 JVM 명령어의 메모리 위치를 저장하는 공간.

 

stack: 지역변수의 값이 저장되는 공간. 메서도가 호출될 때 메소드의 스택 프레임이 저장되는 영역.

메서드가 호출되면 메서드의 호출과 관계되는 지역변수, 매개변수를 스택에 저장.

메서드의 파라미터 값이 저장된다. 

push로 데이터를 저장, pop으로 데이터를 동적으로 인출

LIFO(List in Last out)으로 작동된다.(늦게 저장된 데이터가 가장 먼저 나간다. )

높은 주소에서 낮은 주소의 방향으로 할당된다.

 

Method: 사용되는 클래스에 대한 정보와 함께 클래스 변수 (static variable) 가 저장되는 공간이다. 메서드의 바이트 코드가 저장된다.

 

Heap: 사용되는 모든 인스턴수 변수가 저장,관리되는 영역. new 키워드를 사용해 인스턴스가 생성되면 해당 인스턴스의 정보를 여기에 저장.

메모리의 낮은 주소서 높은 주소의 방향으로 할당된다.

 

 

Object

클래스, 인스턴스와 대비된다.

비유하자면 붕어빵 이라는 개념

 

생성자 내부에서 super 키워드를 명시하지 않고, 오버로딩된 생성자를 this로 호출하지 않으면 super()가 암시적으로 생성자의 첫 줄 이전에 호출된다. 따라서 부모 클래스의 기본생성자가 필수적이다. 그런데 부모 클래스에서는 명시적으로 생성자를 선언했으므로 기본생성자가 암시적으로 생성되지 않는다. 따라서 명시적으로 부모 클래스에 기본생성자를 추가해주어야 한다. (+참고로 super 및 this로 다른 생성자를 호출하는 코드는 항상 생성자의 첫 줄에 위치해있어야 한다.)

 

 

 

메소드 오버라이딩 overrideing

부모 클래스에서 정의한 메서드를 자식 클래스에서 같은 이름으로 다시 정의한다.

부모를 공유하는 여러 자식 클래스들의 세부적인 동작을 달리하기 위해서 사용

부모 탙입의 변수에 대해 메서드를 호출해도 실제 인스턴스가 자식 타입이면 자식 타입에서 재정의한 메소드가 호출된다.

 

업캐스팅

자식이 부모 타입으로 가는 것.

묵시적으로 발생한다.

메소드 호출 범위가 좁아질 가능성이 있다. (부모로 형변환이 된다는 것은, 자식만 가지고 있는 속성,메소드를 실행하지 못한다는 것이므로)

 

728x90

'기타' 카테고리의 다른 글

퀴즈 7회차  (0) 2024.04.12
퀴즈 6회 오답노트  (1) 2024.03.30
퀴즈 오답노트  (0) 2024.03.22
퀴즈 2회차 오답  (0) 2024.02.23
퀴즈 1회 오답노트  (0) 2024.02.16