[Java]-클래스

이창희·2022년 5월 6일
0

Java

목록 보기
8/13

클래스

1. 클래스

객체를 프로그래밍 하기 위해 코드로 정의해 놓은 상태를 말한다.

1) 클래스의 구조

클래스의 구조는 클래스선언부, 클래스이름, 맴버변수 선언, 생성자 메소드, 메소드로 만들어진다.

//클래스 선언부
class 클래스이름{

	//맴버변수 선언

	//생성자 메소드 선언

	//메소드 선언
}

(1) 클래스 선언부

class 예약어 뒤에 클래스 이름을 적는다. 이름은 대문자로 시작하는것 이 묵언의 규칙이다.

(2) 멤버변수(Member Value)

클래스 선언부 바로 밑에 일반적으로 위치하며 ‘클래스 변수’ 또는 ‘필드’라고도 한다.

  • 클래스로부터 객체가 생성될 때 객체에 포함되는 유일한 요소이다.
  • 객체를 이용한다는 것은 멤버변수에 할당된 데이터를 이용한다는 것과 같다.

(3) 생성자 메소드 (Constructior Method)

  • 생성자는 클래스 이름과 동일한 이름의 메소드이다.
  • 객체의 멤버변수 초기화를 담당한다.

2. 객체의 생성과 사용

1) 객체의 생성과 사용

클래스로부터 객체를 생성하기 위해서는 new를 사용한다.

new 생성자();

참조 변수선언과 객체할당을 한 줄로 작성할 수도 있다.

클래스이름 참조변수 == new 생성자();

2) 참조 변수의 특징

  • 참조 변수는 기본 타입의 변수와 달리 객체의 주소 정보가 할당이 된다.

3. 객체와 접근 제어

1) 접근 제어 개념

  • 외부에 공개할 정보와 그렇지 않은 정보를 구분하여 접근을 제어하기 위해 사용한다.

2) 접근제어 지시자

  • 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수있는지여부를 지정하는 키워드
키워드설명
아무것도 없음 ( default )같은 패키지 내부에서만 접근 가능 (상속 관계라도 패키지가 다르면 접근 불가)
public클래스의 외부 어디서나 접근할 수있음
protected같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근 할 수 없음
private같은 클래스 내부에서만 접근 가능( 외부 클래스, 상속관계의 클래스에서도 접근 불가)

4. 메소드

1) 메소드의 구조

리턴타입 메소드이름 (매게변수목록){
//메소드의 기능(로직)
	return 메소드 실행결과;
}

(1) 리턴타입

  • 메소드가 리턴할 데이터 타입이다.
  • 반드시 리턴타입으로 선언한 데이터를 리턴해야 한다.
  • 아무것도 리턴하지 않는다면 리턴타입을 void로 선언한다.

(2) 메소드 이름

  • 메소드이름을 너무 축약해서 쓰게되면 기능을 유추할 수없기때문에 되도록 축약하지 않도록 쓰는 것이 좋다

(3) 매게변수

  • 매게변수를 통해 메소드이 기능 수행에 필요한 데이터를 받아들인다.
  • 멤버변수만으로 기능을 처리할 수 있는 경우 매게변수를 선언하지 않아도 된다. ()는 써줘야한다.
  • 메소드가 종료되는 순간 삭제된다.
  • 매게변수의 개수는 적을수록 좋다.
  • 매개변수는 매개변수가 선언된 메소드 안에서만 사용할 수 있는 로컬 변수다.

2) get()/set()메서드

  • private 으로 선언된 멤버 변수 (필드)에 대해 접근, 수정할 수 있는 메서드를 public으로 제공
  • get() 메서드만 제공 되는 경우 read-only 필드
  • 이클립스에서 자동으로 생성됨 ( Shift + Alt+ sGenrate Getters and Setters 클릭)

3) 메소드 오버로딩

하나의 클래스에 이름이 같은 메소드를 여러 개 선언하는 것을 메소드 오버로딩이라고 한다.

int print(int number){
    return number; 
}

int print(int number, int score){
    
 return number+score;
}

int print(double avg, int number){
    return avg
}

(1) 오버로딩의 조건

  1. 메서드 이름이 같아야 한다
  2. 매개변수의 개수 또는 타입이 달라야 한다
  3. 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다
    ( 리턴타입은 오버로딩을 구성하는데 아무런 영향도 주지 못한다.)

(2) 오버로딩의 장점

  1. 메서드의 이름을 절약할 수있다.
  2. 하나의 이름만 기억하면 되므로 기억하기도 쉽고 이름도 짧게 할 수 있어서 오류의 가능성을 많이 줄일 수 있다.

4) 메소드 호출과 타입 변환

(1) 메소드 호출

메서드이름(1,2); //메서드를 호출하는 방법

print99dan(); //pint99dan 메서드를 호출한다.

(2) 메서드 형변환

  • 메소들를 호출할 때 매개변수의 타입이 일치하지 않아도 타입 변환이 가능하다면 메소드 호출을 처리한다.

5) 클래스 메서드(static 메서드)와 인스턴스 메서드

(1) 클래스메서드

  • 메서드 앞에 static이 붙어있으면 클래스 메서드이다.
  • 객체를 생성하지 않고도 클래스이름.메서드이름(매게변수)와 같은식으로 호출이 가능하다.

(2) 인스턴스 메서드

  • 메서드 앞에 static이 붙어있지 않으면 인스턴스 메서드이다.
  • 인스턴스를 생성해야만 호출할 수 있는 것이다.

(3) 메서드 선정기준

  • 인스턴스와 관계없는 (인스턴스 변수나 인스턴스 메서드를 사용하지 않는) 메서드를 클래스 메서드를 정의한다.
  • 메서드의 작업을 수행하는 데 인스턴스 변수를 필요로 하는 메서드이다.
  • 클래스를 설계할때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.

클래스 메서드는 인스턴스 변수를 사용할 수 없다.

6) get()/set()메서드

  • private 으로 선언된 멤버 변수 (필드)에 대해 접근, 수정할 수 있는 메서드를 public으로 제공
  • get() 메서드만 제공 되는 경우 read-only 필드
  • 이클립스에서 자동으로 생성됨 ( Shift + Alt+ sGenrate Getters and Setters 클릭)

7) 재귀호출(recursive call)

  • 메서드의 내부에서 메서드 자신을 다시 호출하는 것을 ‘재귀호출(recursive call)’이라 하고, 재귀호출을 하는 메서드를 ‘재귀 메서드’라 한다.
void method(){
		method(); // 재귀호출. 메서드 자신을 호출한다.
}
//method() 함수가 무한반복된다.
  • 재귀호출도 조건문이 필수적으로 따라다닌다.
void method(int n){
		if(n==0){
				return; //n의 값이 0일 때, 메서드를 종료한다.
		System.out.println(n);

		method(--n);  // 재귀호출. method(int n)을 호출
}

5. 생성자

1) 생성자의 개념과 특징

  • 리턴 타입이 없으며 void조차 허용되지 않는다.
  • 메소드 이름이 클래스 이름과 동일하다.
  • 객체 생성 시 자동으로 호출된다.
  • 일반 메소드처럼 참조변수를 통해 호출할 수 없다.
  • 생성되는 객체의 멤버변수 초기화를 담당한다.
  • 생성자가 하나도 정의되지 않으면 기본 생성자(default 생성자)가 자동으로 제공된다.
  • 하나의 클래스에 여러 개의 생성자를 오버로딩할 수 있다.
  • this() 형태의 특수한 생성자가 있다.

2) 기본생성자 (default 생성자)

기본 생성자는 클래스에 생성자가 하나도 없을 때 기본으로 제공된다.

3) 생성자 오버로딩과 .this

this는 변수나 메소드 앞에 사용할 수 있으며, 객체에 포함된 멤버변수나 메소드를 참조할 때 사용한다.

4) this() 생성자

this()로 기존에 있던 생성자를 오버로딩하여 다른 생성자를 작성할때 편하게 작성할 수있다.

profile
백앤드 개발자를 꿈꾸는 개발자 지망생입니다.

0개의 댓글