개발/JAVA

[JAVA] 클래스_ 필드, 생성자, 메서드

mabb 2022. 5. 19. 10:10
반응형

 안녕하세요. 삶의 질을 높이고자 노력하는 영차영차입니다.
자바 기본기를 탄탄히 다지기 위한 공부 목적 포스팅입니다.
이것이자바다, HeadFirstJava 등의 교재와 구글링을 토대로 본인의 이해를 위해 작성하였으며
계속해서 살을 붙여나갈 계획입니다.
틀린 부분이 있을 경우 댓글 남겨주시면 감사하겠습니다.
---------------------------------------------------------------------------------------------------------

WHY
-클래스의 구성멤버를 알아야 클래스를 설계할 수 있음.

필드: 객체의 고유데이터, 부품 객체, 상태정보 등을 저장하는 곳.
메서드:
객체의 동작을 수행하는 {}중괄호 블록.
생성자:
객체를 생성하고 초기화 하는 {}중괄호 블록.

필드는 선언 시 자동으로 초기화가 된다.
int number;  선언 시 자동으로 0으로 초기화가 됨.


필드와 로컬변수의 구분
필드는 생성자나 메서드의 {}중괄호 블록 안이 아닌 클래스의 {}중괄호 블록 안에 선언한다.
전체 생성자와 메서드에서 사용할 수 있으며 객체가 소멸하지 않는 한 객체와 함께 존재한다.

로컬변수는 생성자나 메서드의 {}중괄호 블록 내에 선언한다. 해당 중괄호가 종료되면 소멸한다.

필드+메서드를 멤버라고 칭할 때
클래스멤버(static멤버, 정적멤버)
인스턴스멤버(intstance멤버)로 구분이 된다.
인스턴스멤버는 객체를 생성해야만 사용이 가능하다.
객체.필드  , 객체.메서드 의 형태로 사용.
 
static int number; 처럼 static이 붙은 경우 객체를 생성하지 않고도 사용이 가능하다.
클래스명.필드 , 클래스명.메서드 의 형태로 바로 사용할 수 있다.

각각의 객체마다 사용할 필요가 있을 경우 인스턴스멤버로 선언하고 객체마다 구분할 필요없이 공용으로 사용할 용도인 경우 정적멤버로 선언한다.

클래스로부터 객체를 생성할 때 필요한 것 ->생성자
모든 클래스는 반드시 한 개 이상의 생성자를 가진다.
생성자를 선언하지 않은 경우 컴파일러가 자동으로 기본 생성자를 바이트코드에 추가한다

클래스 변수 = new 클래스();

클래스() 는 생성자

기본 생성자
클래스(){}
-> 기본 필드값으로 클래스의 객체가 생성된다.
 new 연산자에 의해 해당 객체의 주소값이 반환되고 이를 클래스 타입 변수에 저장하여 사용한다.

클래스(int x,int y){
  this.x = x;
  this.y = y;
)
->매개변수를 받아 필드값을 초기화하면서 클래스의 객체를 생성할 수도 있음
클래스 변수 = new 클래스(10,100);
로 선언하여 생성한 객체는 필드값 x,y가 각각 10,100으로 초기화되어있음

객체를 초기화 할 수 있는 다양한 조합으로 여러가지 생성자를 선언하는 것을 
생성자 오버로딩(Overloading)이라고함.  

생성자를 직접 오버로딩한 경우 컴파일러가 기본생성자를 자동추가 하지 않으므로
기본 생성자까지 만들어주어야함.

생성자 오버로딩 시 발생하는 코드의 중복은 자기 자신의 생성자를 호출하는 this() 를 이용하여 효율화할 수 있음.

 

메서드
반환값 메서드명 (매개변수) 중괄호{ //실행내용  }

반환값이 있을 수도 있고(반환값의 type 기재) 없을 수도 있음(void 기재)
매개변수가 있을 수도 있고( ()괄호 속 타입과 매개변수이름 기재) 없을 수도 있음 ( ()괄호 속 공란)

메서드도 생성자와 마찬가지로 오버로딩하여 선언할 수 있음.
다양한 조합으로 매개변수를 넣을 수 있도록 같은 기능을 수행하는 같은 이름의 메서드를 여러개 선언하는것.

※참고
매개변수의 갯수를 모를 때 
(int ... x) 와 같이 ...으로 표현한다.

같은 객체 내부에서 메서드를 이용할 경우 객체를 생성하지 않아도 됨.
객체 외부에서 메서드를 이용할 경우에는 해당 객체부터 생성한 후 
객체.메서드() 로 메서드를 실행할 수 있다.

 

 

 

 

 

반응형

'개발 > JAVA' 카테고리의 다른 글

[JAVA] 인스턴스멤버_ this  (0) 2022.05.19
[JAVA] 메모리 사용영역  (0) 2022.05.19
[JAVA] 클래스  (0) 2022.05.19
[JAVA] 객체와 객체지향 프로그래밍  (0) 2022.05.19
[JAVA] 선언문,반복문, 조건문  (0) 2022.05.19