[java] 필드, 생성자, 메소드,
필드
표현식
[접근제한자] [예약어] class 클래스명 {
[접근제한자] [예약어] 자료형 변수명 [= 초기값];
}
** 초기값을 설정하지 않으면 JVM이 초기화
- 예시
public class Academy {
public int temp1;
protected int temp2;
int temp3; //접근제한자 생략 시 default
private int temp4; // 캡슐화 원칙으로 private 사용
}
필드 접근 제한자
구분 | 해당 클래스 내부 | 같은 패키지 내 | 후손 클래스 내 | 전체 | |
+ | public | o | o | o | o |
# | protected | o | o | o | |
~ | (default) | o | o | ||
- | private | o |
필드 예약어 - static
- 같은 타입의 여러 객체가 공유할 목적의 필드에 사용하며, 프로그램 start시에 정적 메모리(static) 영역에 자동 할당되는 멤버에 적용
- 표현식
public class Academy {
private static int temp1;
}
** 일반필드와 static필드는 생성되는 시점이 다르다
일반필드는 객체가 생성될때마다 생성
static필드는 클래스가 처음 메모리가 읽혀갈 때
필드 예약어 - final
- 하나의 값만 계속 저장해야 하는 변수에 사용하는 예약어
- 표현식
public class Academy {
private final int TEMP1 = 100;
private int temp4;
}
** 값을 변경할 수없음
필드 - 클래스 초기화 블럭
- 인스턴스 블럭 ({ }) - 인스턴스 변수를 초기화 시키는 블럭으로 객체 생성시 마다 초기화
- static(클래스) 블럭(static { }) - static 필드를 초기화 시키는 블럭으로 프로그램 시작 시 한번만 초기화
** 일반필드와 static필드의 생성시점이 다르기 때문에 각각
- 표현식
[접근제한자] [예약어] class 클래스명 {
[접근제한자] static 자료형 필드1;
[접근제한자] 자료형 필드2;
static{ 필드1 = 초기값; }
{ 필드2 = 초기값; }
필드 실습
각 생성시점, 소멸 시점, 메모리영역 기억하기
필드
변수이름 구분 하자! (인스턴스변수, 멤버변수 / 클래스변수 / 지역변수 / 매개변수)
필드는 JVM이 자동으로 초기값으로 초기화
지역변수는 5입력
매개변수는 호출할 때 넘겨주기 때문에 별도의 초기화 입력x
필드에 사용 가능한 접근 제한자
Application
- 패키지가 같기 때문에 protected, default 가능!!
- 패키지가 동일하던, 동일하지 않던 클래스내에서만 접근이 가능하기 때문에 private은 불가!!
Static필드
- public과 private 구분
Application
static ->객체생성 안하고 클래스명.으로 접근!
final 필드
static final 상수필드
Application
static이기 때문에 객체생성 필요x
final이 상수가 될 수없는 이유
첫번째 객체는 10이라는 값, 두번째 객체는 20이라는 값을 가짐
1. 동일한 final필드이지만 객체마다 값이 동일하지 않음
2. 공유할 목적이 아니라 객체를 각각 가지고 있음
----> static final 선언으로
생성자
생성자란?
- 객체가 new 연사자를 통해 Heap 메모리 영역에 할당될 때 객체 안에서 만들어지는 필드 초기화 + 생성 시 필요한 기능 수행
- 생성자는 일종의 메소드로 전달된 초기값을 받아서 객체의 필드에 기록
생성자규칙
- 메소드 선언과 유사하나 반환 값이 없음
- 생성자명을 클래스명과 똑같이 지정해주어야 함
표현식
[접근제한자] [예약어] class 클래스명 {
[접근제한자] 클래스명() { }
[접근제한자] 클래스명(매개변수) {(this.)필드명 = 매개변수;}
}
puvlic class Academy {
private int studentNo;
private String name;
public Academy() { } // 기본 생성자
public Academy(int studentNo, String name) { // 매개변수 있는 생성자
this.studentNo = studentNo;
this.name = name;
}
}
기본 생성자
- 작성하지 않을 경우, 클래스 사용 시 JVM이 자동으로 기본 생성자 생성 (Ctrl + space)
매개변수 생성자
- 객체 생성 시 전달받은 값으로 객체를 초기화 하기 위해 사용
- 매개변수 생성자 작성 시 JVM이 기본 생성자를 자동으로 생성해주지 않음
- 상속에서 사용 시 반드시 기본 생성자를 작성
- 오버로딩 이용하여 작성
오버로딩
- 한 클래스 내에 동일한 이름의 메소드를 여러 개 작성하는 기법
오버로딩 조건
- 같은 메소드 이름
- 다른 매개변수의 개수 또는 다른 매개변수 타입
this
- 모든 인스턴스의 메소드에 숨겨진 채 존재하는 래퍼런스로, 할당된 객체를 가리킴
- 함수 실행 시 전달되는 객체의 주소를 자동으로 받음
this 예시
public class Academy{
private String name;
public Academy() { }
piblic Academy(String name) {this.name = name; }
}
this()
- 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용, 반드시 첫 번째 줄에 선언해야 함
this()예시
public class Academy
private int age;
private String name;
public Academy() {this(20,"김철수);}
public Academy(int age, String name) {
this.age = age; this,name = name;
}
생성자 실습
- 44번 라인에 id, pwd, name 생성자가 존재하기 때문에 this() 사용
Application
-같은 user를 사용 -> 오버로딩
메소드
메소드란?
- 수학의 함수와 비슷하며 호출을 통해 사용, 전달 값이 없는 상태로 호출을 하거나 어떤 값을 전달하여 호출을 하며,
함수 내에 작성된 연산 수행
- 수행 후 반환 값 / 결과 같은 있거나 없을 수 있음
메소드 표현식
[접근 제한자] [예약어] 반환형 메소드명( [매개변수] ) {
// 기능 정의
}
public void information( ) {
System.out.println(studentNo);
}
메소드 접근 제한자
- 필드와 동일
메소드 예약어
구분 | 전체 |
static | static 영역에 할당하여 객체 생성 없이 사용 |
final | 종단의 의미, 상속 시 오버라이딩 불가능 |
abstract | 미완성된, 상속하여 오버라이딩으로 완성시켜 사용해야 함 |
synchronized | 동기화 처리, 공유 자원에 한 개의 스레드만 접근 가능함 |
stati final | static과 final의 의미를 둘 다 가짐 |
메소드 반환형
구분 | 전체 |
void | 반환형이 없음을 의미, 반환 값이 없을 경우 반드시 작성 |
기본 자료형 | 연산 수행 후 반환 값이 기본 자료형일 경우 사용 |
배열 | 연산 수행후 반환 값이 배열인 경우 배열의 주소값이 반환 |
클래스 | 연산 수행후 반환 값이 해당 클래스 타입의 객체일 경우 해당 객체의 주소값이 반환 (클래스 == 타입) |
메소드 매개변수
구분 | 전체 |
( ) | 매개변수가 없는 것을 의미 |
기본 자료형 | 기본형 매개변수 사용 시 값을 복사하여 전달 매개변수 값을 변경하여도 본래 값은 변경되지 않음 |
배열 | 배열, 클래스 등 참조형을 매개변수로 전달 시에는 데이터의 주소 값을 전달하기 때문에 매개변수를 수정하면 본래의 데이터가 수정됨(얉은 복사) |
클래스 | |
가변인자 | 매개변수의 개수를 유동적으로 설정하는 방법으로 가변 매개변수 외 다른 매개변수가 있으면 가변 매개변수를 마지막에 설정 * 방법 : (자료형 ... 변수명) |
return - 해당 메소드를 종료하고 자신을 호출한 메소드로 돌아가는 예약어
- 반환 값이 있다면 반환 값을 가지고 자신을 호출한 메소드로 돌아감
메소드 실습
Application
오버로딩 실습
- 자료형의 순서와 개수가 중요!