-
JAVA 생성자와 접근제한자back-end&DB/Java 2023. 5. 19. 14:36728x90
1.생성자
1.1 생성자의 특징
- 생성자는 하나 이상 선언되어야 함
- 생성자 이름은 클래스 이름과 동일
- 생성자는 리턴 타입을 지정 할 수 없다.
- 생성자는 new를 통해 객체를 생성할 때만 호출됨
- 생성자는 메소드다
개발자는 생성자를 정의하지 않으면 자동으로 기본 생성자가 정의됨
컴파일러에 의해 자동 생성
기본 생성자를 디폴트 생성자(default constructor)라고도 함
만약 default 생성자만 존재하고 default에 아무런 기능이 없을 경우 생략이 가능함
public class Student { // 클래스의 이름과 동일 String name; String number; int age; public Student(String name, String number, int age) { // 클래스의 이름과 동일 this.name = name; //리턴 타입은 없다. this.number = number; //리턴 타입은 없다. this.int = age; //리턴 타입은 없다. } // default 생략이 가능하다.
aaa.name = "에이군"; aaa numner = "20230001"; aaa age = 20; Student aaa = new Student("에이군","20230001",20,);
2. 생성자 종류
- public
모든 클래스 파일에서 사용이 가능하다.
-protected
같은 클래스 같은 패키지에서 불러오는것이 가능하다.
- default
같은 클래스 같은 패키지에서 불러오는 것이 가능하다.
default 는 클래스에서 접근 제한자 생략이 가능하다.
String default_string; void method_test() { }
- pruvate
본인 클래스 파일에서만 접근이 가능
private int hp; private int attack; private int defense; private int speed; private String type;
제어자 같은 클래스 같은 패키지 자손 클래스 전체 public ㅇ ㅇ ㅇ ㅇ protected ㅇ ㅇ ㅇ default ㅇ ㅇ private ㅇ - this
생성자의 이름으로 클래스이름 대신 this를 사용
한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능
public Pokemon(int hp, int attack, int defense, int speed, String type) { this.hp = hp; this.attack = attack; this.defense = defense; this.speed = speed; this.type = type; }
3. 캡슐화(Encapsulation)
외부에서 공개된 메소드를 통해 접근이 가능
public int getHp() { return hp; } public void setHp(int hp) { this.hp = hp; }
4. 생성자 예제
- Calculator 클래스를 작성하세요
Calculator클래스의 필드 접근지정자 타입 변수명 설명 private int num1 첫 번째 정수 private int num2 두 번째 정수 Calculator클래스의 메소드 이름 리턴타입 매개변수 설명 calculator X int 변수이름,
int 변수이름2개의 매개변수를 가진
생성자로 num1, num2sum int - num1 과 num2를 더한 값 sub int - num1 과 num2를 뺀 값 mul int - num1 과 num2를 곱한 값 div double - num1 과 num2를 나눈 값 public class Calculator { private int num1; private int num2; public Calculator(int num1, int num2) { this.num1 = num1; this.num2 = num2; } public int sum() { return num1 + num2; } public int sub() { return num1 - num2; } public int mul() { return num1 * num2; } public double div() { return (double)num1/num2; } }
public class Calculator_main { public static void main(String[] args) { Calculator cal = new Calculator(75, 5); int sum_result = cal.sum(); System.out.println(sum_result); ... }
5. 메소드 오버로딩
메소드 이름이 같아야 한다.
매겨변수의 개수 또는 타입이 달라야 한다.
- 오버로딩의 장점
메소드의 이름 낭비 방지
같은 메소드에 여러종류의 매개변수를 받을 수 있음
public class Calculator { private int num1; private int num2; public Calculator(int num1, int num2) { this.num1 = num1; this.num2 = num2; } public Calculator(int num1) { // << 오버로딩 this.num1 = num1; } public int square() { return num1 * num1; }
Calculator cal = new Calculator(75, 5); int sum_result = cal.sum(); System.out.println(sum_result); System.out.println(cal.sub()); Calculator cal2 = new Calculator(12); System.out.println(cal2.square());
728x90'back-end&DB > Java' 카테고리의 다른 글
JAVA MVC패턴 (0) 2023.05.22 JAVA 상속과 오버라이딩(Overriding) (0) 2023.05.19 JAVA 객체 지향 프로그래밍(OOP) (0) 2023.05.18 JAVA Array와 ArrayList (0) 2023.05.17 JAVA 메소드 (0) 2023.05.16