728x90
20220913(화)
- 목차
- 정적 멤버와 static
- 싱글톤 Singleton
- final 필드와 상수
- 패키지 - import 문
- 디버깅 실행키
- 접근 제한자
- getter setter
- 상속 개념
- 재정의 Overriding
< 정적 멤버와 static >
- 정적 멤버 ( = 클래스 멤버)
클래스에 고정된 멤버로 객체를 생성하지 않고 사용할 수 있는 필드와 메서드
정적 필드 (클래스 멤버) | 인스턴스 필드 (객체 멤버) | |
판단 기준 |
*객체 생성 없이도 실행이 됨 객체마다 가지고 있을 필요가 없는 변하지 않는 공용적인 데이터 선언 필드 |
*객체가 있어야 실행됨 객체별로 @가 다를 경우 선언 |
ex | static double pi = 3.14159; // 계산기에서 사용하는 파이 값은 동일하다. |
String color; // 계산기별로 색깔이 다를 수 있다. |
초기화 | 객체 생성 없이도 사용해야 하므로 생성자에서 초기화 작업 불가능 |
생성자에서 초기화 해야 함 |
접근 | 클래스 이름으로 접근(객체 참조변수도 가능) Calculator.plus(10,5); |
객체 생성 후 참조변수로 접근 Car myCar = new Car(); // 객체 생성 myCar.speed= 70; // 필드 접근 myCar.run(); // 메소드 접근 |
this 사용 | 객체 자신의 참조인 this 사용불가 | 생성자와 메소드매개변수 이름이 필드와 동일시, 자신의 참조(주소)를 갖고 있는 키워드 this 사용가능 |
< 싱글톤 Singleton >
- 싱글톤
하나의 어플리케이션 내에서 단 하나만 생성되는 객체
(소프트웨어 디자인 패턴 중 생성 패턴의 하나) - 디자인 패턴이란?
개발을 구조적으로 우아하게 설계하려고 노력하다 보니 발견된 반복되는 패턴들 - 특징
: 하나의 클래스로 객체를 단 한 번만 생성하도록 클래스를 설계.
싱글톤 만드는 방법 3단계
객체의 참조는 똑같다! (동일한 객체) getInstance로만 불러올 수 있음
< final 필드와 상수 >
final 필드 | 상수 |
초기값이 저장되면 이것이 최종적인 값이 되어 프로그램 실행 도중 수정 불가능 |
불변의 값. ex) 파이, 지구의 무게 및 둘레 등 |
final 필드 != 상수 | |
객체마다 저장됨 생성자의 매개값을 통해 여러 값을 가질 수 있기 때문에 상수가 될 수 X |
객체마다 저장할 필요가 없는 공용성, 여러가지 값으로 초기화 될 수 없음 |
상수 이름은 모두 대문자로 작성하는 것이 관례
< 패키지 - import 문 >
- 패키지에서 import 문이 필요한 이유?
- 같은 패키지에 속하는 클래스들은 아무런 조건 없이 다른 클래스 사용할 수 있지만,
다른 패키지에 속하는 클래스를 사용하려면 아래 두 가지 방법 중 하나 선택 필요
1) 패키지와 클래스 모두 기술하거나 (➡ 코드 난잡)
2) import 문 사용
단, 패키지는 다르지만 클래스명이 동일할 경우, 혼란 방지를 위해 1)의 방법을 사용함.
< 디버깅 실행키 >
- F5 (Step Into) : 프로그램을 한 스텝 진행, 다음 실행 문이 함수 안이면 함수 안으로 들어감
- F6 (Step Over) : 메서드를 하나의 단위로 보고, 실행하고 그다음 줄로 넘어간다.
- F7 (Step Return) : F5로 진입한 상태에서 나오고 싶을 때 ➡ 실행하고 나와버린다.
< 접근 제한자 >
private | 같은 파일 안에서만 사용 가능 |
default | 같은 패키지 내에서만 사용 가능 |
public | 다른 패키지에서도 아무런 제한 없이 사용 가능 |
🤷♂️ 아~ 나 그럼 다 public으로 하고 싶은데?
➡ 할 수는 있지. 개발할 수는 있지만,, 협업하고 작업할 때 실수 생기면?
사전 방지 위해서라도 구분해서 사용하자!
+) 어느 때 사용할지 나중에 예제를 통해 더 알게 된다.
< Getter Setter 메서드 >
- 필요성
클래스 선언 시 필드는 일반적으로 private 접근 제한을 함
- 읽기 전용 필드가 있을 수 있다. ➡ Getter의 필요성
- 외부에서 엉뚱한 값으로 변경할 수 없도록 함 ➡ Setter의 필요성
Getter : 필드 값 가져오기 | |
private 필드의 값을 리턴하는 역할을 한다. getFieldName( ) 메소드를 말한다. *필드 타입이 boolean일 경우 ➡ isFieldName( ) |
public 리턴 타입 getFieldName( ) { return fieldName; } |
Setter : 값 초기화 | |
외부에서 주어진 값을 필드값으로 수정한다. setFieldName(타입 변수) 메소드를 말한다. |
public void setFieldName(타입 fieldName) { this.fieldName = fieldName; } |
< 상속 개념 >
기존에 만든 것을 재사용한다.
생성자 메서드를 수동으로 정의하면, 디폴트 생성자가 컴파일 과정에서 자동생성이 안된다.
- 클래스 상속
- 현실에서 상속은 부모가 자식을 선택해서 물려주지만, 프로그램에서는 자식이 부모를 선택한다!
ex) class 자식 클래스 extends 부모 클래스 { };
✨암기하기!
new 연산자 : 메모리 생성 연산자(힙 영역)
1) new 연산자가 DmbCellPhone클래스의 상속관계를 먼저 확인 후
2) 상속되어 있으면, 부모 클래스의 메모리를 먼저 생성한다.
3) 자식(자신) 클래스의 메모리를 생성한다.
4) 부모 생성자 호출 - 자식(자신) 생성자 호출 순서로 진행이 된다.
- 부모 생성자 호출
부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다. super(); - 부모 클래스를 상속받아야 되는데 매개변수(파라미터가 있는) 생성자를 갖고 있으면,
자식은 기본 생성자를 사용할 수 없다. ➡ super로 부모를 호출
빨간 박스 : 부모에서 물려받은 필드 출력
< 메서드 재정의 Overriding >
- Overloading vs Overriding
Overloading | Overriding |
중복정의 | 재정의 (상속관계) |
하나의 클래스 안에서 동일한 이름을 여러개 사용 | 부모클래스의 메서드 명을 자식클래스에서 메서드명을 이용하여, 내용을 변경하는 것. |
- 재정의 탄생 배경
자식 클래스에서 부모의 메서드명은 맘에 들고, 메서드명을 새롭게 만들기에는 이름에 부담이 발생.
& 개발자의 정신적 건강을 위해. - @Override (오버라이드 어노테이션)
컴파일러에게 부모 클래스의 메서드 선언부와 동일한지 검사 지시
컴파일러에게 아래 메서드는 상속관계에서 부모 클래스의 메서드를 재정의하는 것이라고 정보제공
Override 생성 후, { } 중괄호 안의 내용은 바꿔야 재정의!
더보기
- 변수 : 기억 장소가 값을 변경하는 특징
- 상수 : 기억 장소가 값이 변경되지 않는 특징 / 값을 위해서 만든 이름.
✔ 기억 장소에 이름을 부여해서, 기억 장소를 관리 ➡ 값을 이름을 부여해서 사용
728x90
'🏫 Open API_JAVA' 카테고리의 다른 글
[38일차] 필수 이론 정리 / 오라클 테이블 생성 / 매개 변수의 다형성 (0) | 2022.09.19 |
---|---|
[37일차] final / 접근 제한자 / 타입 변환과 다형성 / Oracle Database 설치 (0) | 2022.09.15 |
[35일차] 클래스 / 필드 / 메소드 / 생성자 / 인스턴스 / static (0) | 2022.09.12 |
[34일차] 객체배열 / main() / 다차원 배열 / 배열복사 / 향상된 for문 (0) | 2022.09.10 |
[33일차] 문자열 등식 / 논리연산자 / 비트 이동 연산자 / 삼항연산자 (0) | 2022.09.07 |