Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 다형성
- 상수
- Integer.MIN_VALUE
- super()
- extends
- interface
- If
- 문자열
- Break
- 배열
- scanner
- docker
- 삼항 연산
- Integer.MAX_VALUE
- 자바
- 이중 배열
- 이클립스
- 2차원 배열
- rs.next()
- for문
- Else If
- jsp
- arraylist
- javascript
- 삼항 연산식
- 인터페이스
- 오버로딩
- 중첩for문
- 상속
- 메소드
Archives
- Today
- Total
개발로드
★KDT 2024-01-23☆상속, static, 싱글톤, 정적 초기화 본문
상속(extends)
- 상속은 부모클래스를 재사용해서 새로운 클래스를 만들어서 코드의 중복을 줄여준다.
- 자식 클래스를 하위클래스, 부모 클래스를 상위 클래스라고 부른다
☆자바의 상속 특징
- 부모 클래스를 여러개 상속할 수 없다
- private 접근 제한을 가진 부모클래스의 필드와 메소드는 상속대상에서 제외된다.


자식객체는 부모타입으로 변환이 가능하지만, 부모객체는 자식타입으로 변환이 불가능하다!
why? heap에는 완성된 객체가 올라가야 하는데 부모객체는 자식타입의 객체보다 멤버수가 적어서 자식타입의 멤버를 채 워줄 수가 없어서 에러가 발생한다.
★필드(field)
- 메소드의 내부(지역변수)를 제외하고 클래스 내부의 어디에서든 선언할 수 있다
- 지역변수는 매개변수나 메소드 내부에서 선언된 변수,for문, while문, if문등 블록내부에서도 지역 변수를 선언할 수 있다
- 필드 선언시 초기화하지 않아도 기본값으로 자동 초기화된다.
- 지역변수는 기본값이 없기 때문에 반드시 초기화 해야 한다
- 필드는 클래스 전체에서 사용할 수 있다
- 지역변수는 선언된 후부터 선언된 블록({}) 내부에서만 사용할 수 있다
- 필드는 모든 접근 지정자뿐만 아니라 static, final로 지정할 수 있다
☆this
- 자기자신 객체 참조변수, 자신이 참고하는 객체의 주소, 명확하게 멤버라는 것을 제시하고자 할때 사용
★this()
- 자신의 다른 생성자를 호출 반드시 첫 줄에 사용한다
☆ 생성자
- new 연산자를 이용해서 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다
★ 객체의 초기화
- 필드를 초기화하거나(사용할 수 있게 준비시킨다) 메소드를 호출해서 객체를 사용할 준비를 하는 것
- 생성자를 사용하지 않고는 클래스로부터 객체를 만들 수 없다
☆ 오버로딩(overloading)
- 매개변수의 개수와 매개변수의 타입이 다른 것
- 생성자 오버로딩: 생성자 이름이 같고, 매개변수의 개수나 매개변수의 타입이 다른 것
- 메소드 오버로딩 : 메소드 이름이 같고, 매개변수의 개수나 매개변수의 타입이 다른 것 리턴타입은 의미가 없음
★메소드 선언
| [접근제한자] 리턴타입 메소드명(매개변수,...){ // 선언부(메소드 시그너처(signature)) 메소드를 실행할 코드(문장) // 구현부, 메소드 실행 블록, body } |
- 리턴 타입 : 메소드가 리턴하는 결과의 타입을 표시
- 메소드 이름 : 메소드의 기능이 드러나도록 식별자 규칙에 맞게 이름을 지어줌
- 매개 변수 선언 : 메소드를 실행할 때 필요한 데이터를 받기 위한 변수를 선언
- 메소드 실행 블록 : 실행할 코드 작성
☆static 제어자★
★정적(static) 멤버
- 앞에 static이 붙은 멤버 객체 생성없이 '클래스명.멤버명'으로 바로 사용
- 클래스 변수(정적변수) : 클래스 내부에 생성, 객체간 공유 변수
- 정적(static) 메서드 내부에서는 정적(static) 멤버만 사용 가능하며, 클래스 내부에서 자신의 객체를 가리키는 this키워드 사용할 수 없음.
☆인스턴스 멤버 & 정적 멤버
- 인스턴스 멤버 : 객체 생성과 함께 만들어진다. '참조변수명.인스턴스 멤버명' 멤버의 저장 공간이 객체 내부 즉 힙영역에 생성(객체에 만들어진다)
- 정적(static) 멤버 : 저정 공간이 클래스 내부 즉 class 영역(정적영역, 메서드 영역, 데이터영역)에 생성
★정적 초기화 블록
- 인스턴스 필드의 초기화는 객체를 생성하는 시점에 이루어진다.
- 즉 객체가 생성자에 의해 초기화 되므로 생성자 내에서 인스턴스 필드를 초기화 해준다.
- 그러나 정적필드는 객체 생성 이전에 사용할 수 있어야 하므로 생성자가 호출되지 않은 상태에서도 초기화 할 수 있어야 함
- (즉 생성자에서는 정적 필드를 초기화 할 수 없음)
- 정적 필드는 정적 초기화 블록(static { } )에서 초기화 해 주어야 함
- 정적초기화 블록은 클래스가 메모리에 로딩될 때 가장 먼저 실행되므로 정적 필드의 초기화 코드를 넣어 주면 클래스가 로딩되는 시점에 바로 초기화
☆main()메서드
- 자바 가상 머신(jvm)은 프로그램을 실행할 때 '실행 클래스명.main()'을 실행하므로 가장 먼저 실행되는 메서드인 main()메서드를 정적 메서드로 구성
★변수 유형에 따른 용도☆
- 지역변수(=local variable) 메소드 등의 내부에 선언
스택영역에 위치(메소드를 호출하는 시점에 스택영역에 올라감)
메소드의 실행이 끝나면 메모리에서 소멸
메소드가 호출 될때 실행되고 메소드 실행이 끝나면 소멸 - 인스턴스 변수 : 클래스에서 필드로 선언되어 있으며,
객체(인스턴스) 내부에 생성되며, heap 영역에 위치 - static변수(=클래스 변수, 정적변수) : static 예약어를 사용하여 클래스 내부에 선언
클래스 내부에 위치
객체들이 공유하는 변수
메소드 영역(=데이터영역,=클래스영역)에 위치하며 프로그램이 끝나고
메모리를 해제할 때 소멸됨
☆싱글톤(singleton) 패턴 ★
| 애플리케이션 전체에서 단 한 개의 객체만 생성 핵심 : 생성자를 private 접근 제한자로 제한해서 외부에서 new 연사자로 생성자를 호출할 수 없도록 막는 것 외부에서 맘대로 객체를 생성하는 것이 불가능 정적 메소드를 이용해서 외부에서 간접적으로 객체를 사용 |
'JAVA' 카테고리의 다른 글
| ★KDT 2024-01-25☆추상 클래스 (0) | 2024.01.25 |
|---|---|
| ☆KDT 2024-01-24★클래스 상속, 다형성,캐스팅 (0) | 2024.01.24 |
| ☆KDT 2024-01-22★ (0) | 2024.01.22 |
| ★KDT 2024-01-19☆ (0) | 2024.01.19 |
| ☆KDT 2024-01-18★ (0) | 2024.01.18 |