버글버글

Java 수업 기록 (9) 클래스(Class), 객체, 메소드, 접근제어자 본문

java/java 수업 기록

Java 수업 기록 (9) 클래스(Class), 객체, 메소드, 접근제어자

Bugle 2022. 7. 29. 00:00
반응형

▶ 클래스(Class) 

클래스
필드 생성자 메소드

1. 객체(Object)를 만들어 내기 위한 설계도

2. User를 구성하는 속성(Attribute)이 필드(Field)이다.

  - 객체의 속성과 행동(Behavior)을 포함하고 있음

3. 클래스는 객체 내부의 값을 저장하기 위한 필드(Field)와 객체의 기능을 나타내기 위한 메소드(Method)로 구성됨.

4. 클래스 소속의 필드(변수와 같은 의미)

5. 여지껏 했던거는 메인 메소드 안에 변수를 선언 한 것.

6. 마침표(.)를 이용해서 필드값을 호출한다.

		// 객체 선언과 생성을 한 번에
		User user = new User();
        
        	System.out.println(user.id);
		System.out.println(user.password);
		System.out.println(user.email);
		System.out.println(user.point);
		System.out.println(user.isVip);

* 모든 User 객체는 필드값을 가지고 있다.

* 클래스(데이터타입) : User

* 객체(변수 개념,인스턴스) : user

 

Ex) int a = 10;

   - a는 변수 -- > 기능이 없음

Ex) String s = "hi"; 

  - s는 객체 -- > s.을 치면 기능을 찾을 수 있음

▶ 필드(Field) 

1. 객체의 속성을 나타내는 변수

2. 일반 변수와 달리 자동으로 초기화 됨 (배열과 비슷하다)

* 필드 선언

	public class User {
	String id;		// null
	String password;	// null
	String email;		// null
	int point;		// 0
	boolean isVip;		// false
	}

* 필드값 변경

	public static void main(String[] args) {
	user.id = "admin";
		user.password = "123456";
		user.email = "admin@web.com";
		user.point = 1000;
		user.isVip = (user.point >= 10000);
	}

* 필드를 클래스에 선언

 

▶ 생성자(Constructor) 

1. 객체를 생성할때 쓰는 메소드를 생성자라고 한다.

생성 예시
Date now = new Date();   Date = 클래스
  now = 객체
  Date() = 메소드

2.특징

  1)메소드 이름이 클래스 이름과 같다.

  2) 반환타입이 존재하지 않는다. (void가 아니라 애초에 존재 자체가 없음)

3. 생성자는 필드 초기화 용도로 사용 (생성자의 역할)

4. 객체가 생성될 때(new) 자동으로 한 번만 호출됨

5. 매개변수 처리는 일반 메소드와 동일함

6. 매개변수로 전달된 값을 이용해서 객체의 필드값을 초기화 할 때 사용

7. 생성자는 객체 생성 방법을 정의하는 메소드

8. 생성자의 개수만큼 객체 생성 방법이 존재함

  - 생성사가 2개이면 객체 생성 방법도 2가지

 

* 디폴트 생성자(Default Constructor)
1. 개발자가 생성자를 만들지 않으면 자바가 자동으로 생성하는 생성자

2. 아무 일도 안하는 형태

3. 객체 생성 역할만 가지고 있으며, 필드 초기화는 불가능함

4. 생성자를 하나라도 만든다면 디폴트 생성자는 사용할 수 없음

* 반환타입 메소드(매개변수) {} → 메소드() {}

 

 

▶ 메소드(Method) 

1. 객체의 행동을 나타내는 함수

2. 객체의 기능을 의미함

( - 믹서기 느낌이라고 생각하면 편함, 물 + 밀가루 = 반죽이 되듯이)

* 메소드의 4가지 유형

반환값 X, 매개변수 X 반환값 O, 매개변수 X
void method() {
    . . .
}
int method() {
    . . .
    return 반환값;

}
반환값 X, 매개변수 O 반환값 O, 매개변수 O
void method(int a) {
    . . .
}
int method(int a) {
    . . .
    return 반환값;

}

예시)

	// 메소드 생성
	int add(int a, int b) {
		int result = a + b;
		return result;						
	}

* return - 결과를 반환 하겠다.

* 반환값 - 함수의 결과가 나가는 값

* 반환값(result)은 데이터타입(int)과 같이 봐줘야 한다.

* 결과는 데이터타입(int)으로 나옴

 

	// 메소드 호출
	int answer = calculator.add(2, 3);	
	System.out.println(answer);

* 2, 3 : 인수(add 메소드로 전달하는 값), 인수는 매개변수에 저장된다.
* 2. answer : add 메소드의 반환값(return result)이 저장된다.

 

 

* 메소드 오버로딩(Method overloading) 

1. 같은 이름의 메소드가 2개 이상 존재한다.
2. 같은 이름과 다른 매개변수를 가져야 오버로딩 할 수 있다.
3. 반환타입은 오버로딩과 상관이 없다.

 

예시)


public class Calculator {

	int add(int a, int b) {
		return a + b;
	}
	
	int add(int a, int b, int c) {
		return a + b + c;
	}
	
	int add(int a, int b, int c, int d) {
		return a + b + c + d;
	}
	
	int add(int[] arr) {
		int total = 0;
		for(int n : arr) {
			total += n;
		}
		return total;
	}
    
}
public class CalculatorMain {

	public static void main(String[] args) {

		Calculator calculator = new Calculator();
		
		System.out.println(calculator.add(1, 1));
		System.out.println(calculator.add(1, 1, 1));
		System.out.println(calculator.add(1, 1, 1, 1));
		
		int[] arr = {1, 2, 3, 4, 5};
		System.out.println(calculator.add(arr)); // 15

	}

 

▶ 객체(Object) 

1. 클래스를 이용해서 생성한 실체가 있는 존재

2. 컴퓨터 메모리 공간을 차지하고 있음

3. 객체를 인스턴스(Instance)라고도 함

4. 다른 객체들과 정보를 주고 받는 상호 작용이 가능

5. 현실 세계의 모든 것이 객체임

 

* 객체 생성 방법 

1. 일반적으로 new 키워드를 이용해서 생성

		Calculator calculator = new Calculator();

2. 객체는 메모리를 할당 받아 물리적으로 존재하게 되는 인스턴스화(Instantiate)과정을 거치는데, 이런 이유로 객체를 인스턴스(Instance)라고도 함

3. 객체는 클래스를 데이터타입으로 가진다고 생각하면 됨.

4. 객체를 생성한 뒤 해당 객체를 이용해서 클래스에 만들어 둔 필드나 메소드를 사용할 수 있음.

객체 생성 예시
Date now = new Date();   Date = 클래스
  now = 객체
  Date() = 생성자

 

▶ 정보 은닉(Information Hiding) 

1. 객체 내부의 정보(=필드)를 다른 객체에게 보여주지 않고 숨기는 것을 의미

2. 객체 외부에서는 객체 내부 정보를 직접 접근하거나 조작하는 것이 불가능

3. 객체의 정보는 필드에 저장하기 때문에 정보 은닉의 실제 의미는 필드 값을 숨기는 것을 의미함.

4. 필드에 직접 접근하는 대신 대체 외부에서 필드에 접근할 수 있도록 별도의 메소드를 구현함

5. 자바는 4가지 접근제어자(Access Modifier)를 통해서 정보 은닉을 구현

접근제어자 - public 접근제어자 - private
- 누구나 접근할 수 있는 권한
- 일반적으로 메소드가 public 권한을 가짐
- 같은 클래스 내부에서만 접근이 가능한 권한
- 일반적으로 필드가 private 권한을 가짐
접근제어자 - default 접근제어자 - protected
- 같은 패키지에서만 접근할 수 있는 권한
- 접근 제어자를 생략하면 default로 동작함

- 여태까지 한 수업에서는 다 default 값이였음.
- 같은 패키지 또는 자식 클래스에서만 접근할 수 있는 권한
-  다른 패키지에 있더라도 자식 클래스는 접근이 가능

 

Default (예시 05_CLASS의 ex01_field 패키지가 default)

1. 같은 패키지에서만 접근할 수 있는 권한

2. 접근 제어자를 생략하면 default로 동작

* 여태까지 수업에 썼던게 이 방식

클래스가 다르면 볼수 없다는게 정보은닉의 포인트이다.

 

▶ this 

1. 객체 자신의 참조값(Reference)

2. 클래스 내부에서만 사용 가능

3. this.필드 또는 this() 형태로 사용

this.필드 this()
- 매개변수와 필드명이 동일한 경우 이를 구분하기 위해서 사용
- this의 가장 주된 사용처
- 생성자 내부에서 사용
- 같은 클래스 내의 다른 생성자를 호출할 때 사용

 

▶ Getter / Setter 

1. 필드는 private 하기 떄문에 외부에서 직접 접근하는 것이 불가능.

2. 외부에서 필드를 접근할 수 있도록 만들어 두는 메소드.

3. Getter / Setter의 이름은 반드시 정해진 이름을 사용해야 함

Getter Setter
- 필드값을 외부로 반환하는 메소드
- "get + 필드명"의 메소드명을 가짐
 (boolean 타입의 필드는 is + 필드명)
- 외부로부터 전달 받은 값을 필드에 저장하는 메소드
- "set + 필드명"의 메소드 명을 가짐
- 매개 변수명와 필드명을 동일하게 구성하기 때문에 this가 사용됨

- Setter : 저장하는 메소드

- Getter : 가져오는 메소드

- Print : 출력하는 메소드

 

▶ Static 

1. 정적 요소이다.

2. 객체 생성 이전에 메모리에 미리 만들어 지는 공동 요소

3. 클래스에서 1개만 만들어 진다.

4. 클래스를 이용해서 호출하기 때문에 클래스 변수, 클래스 멤버 라고도 부른다.

- static을 붙이면 객체명이 기울어진다.

5. 클래스가 로드될 때 메모리 할당

6. 모든 객체가 공유

7. static 멤버 내부에서는 static 멤버만 사용 가능

반응형