프로그래밍 언어/java

[java] 필드, 생성자, 메소드,

좨랭이 2021. 9. 7. 01:42

필드

 

 표현식

   [접근제한자] [예약어] 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

 

오버로딩 실습

  - 자료형순서와 개수가 중요!