생성자
기본 생성자
package test5_2;
public class Person {
String name;
float height;
float weight;
//생성자
//기본생성자
//멤버 변수에 각 자료형이 가지고 있는 기본값으로 초기화시켜줌
Person(){}
//일반 메서드
void show() {
System.out.println("이름 : " + name);
System.out.println("체중 : " + height);
System.out.println("신장 : " + weight);
}
}
package test5_2;
public class Person_Main {
public static void main(String[] args) {
//객체(인스턴스) 생성 : 기본생성자 호출 Person()
//자료형이 가지고 있는 기본 데이터값으로 초기화시킴.
Person p = new Person();
p.show();
}
}
클래스 내에 생성자(메서드)를 지정하지 않은 경우 컴퍼일러가 자동으로 기본 생성자 형식을 만들고 객체를 생성
package test5_2;
public class Person {
String name;
float height;
float weight;
void show() {
System.out.println("이름 : " + name);
System.out.println("체중 : " + height);
System.out.println("신장 : " + weight);
}
}
package test5_2;
public class Person_Main {
public static void main(String[] args) {
//객체(인스턴스) 생성 : 기본생성자 호출 Person()
//자료형이 가지고 있는 기본 데이터값으로 초기화시킴.
Person p = new Person();
p.show();
}
}
초기화된 멤버 변수에 데이터값 넣기
package test5_2;
public class Person {
String name;
float height;
float weight;
Person(){}
void show() {
System.out.println("이름 : " + name);
System.out.println("체중 : " + height);
System.out.println("신장 : " + weight);
}
}
package test5_2;
public class Person_Main {
public static void main(String[] args) {
Person p = new Person();
p.show();
System.out.println("-----------");
//초기화된 멤버 변수에 데이터값 넣기
p.name="가나다";
p.height=123.0f;
p.weight=32.1f;
p.show();
}
}
항상 변수안에 똑같은 값, 변하지 않는 값이 있어야하는 경우
package test5_2;
public class Person {
String name;
float height;
float weight;
Person(){
name="가나다";
height=123.0f;
weight=32.1f;
}
void show() {
System.out.println("이름 : " + name);
System.out.println("체중 : " + height);
System.out.println("신장 : " + weight);
}
}
package test5_2;
public class Person_Main {
public static void main(String[] args) {
Person p = new Person();
p.show();
System.out.println("-----------");
}
}
(일반) 생성자
ex1) 멤버변수 중 name변수 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성해주지 않음.
package test5_2;
public class Person1 {
String name;
float height;
float weight;
//(일반) 생성자
//반드시 데이터값을 멤버 변수에 넣어줘야만 객체가 생성되는 강제성이 있음
//멤버 변수 중에서 name변수에 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성하지 않음.
//예시1)멤버 변수 중에서 name 변수에 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성하지 않음.
Person1(String pname){
name = pname;
}
void show() {
System.out.println("이름 : " + name);
System.out.println("신장 : " + height);
System.out.println("체중 : " + weight);
}
}
package test5_2;
public class Person1 {
String name;
float height;
float weight;
//(일반) 생성자
//반드시 데이터값을 멤버 변수에 넣어줘야만 객체가 생성되는 강제성이 있음
//예시1)멤버 변수 중에서 name 변수에 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성하지 않음.
Person1(String pname){
name = pname;
}
void show() {
System.out.println("이름 : " + name);
System.out.println("신장 : " + height);
System.out.println("체중 : " + weight);
}
}
ex2) 멤버변수 중 name변수, height변수에 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성해주지 않음.
package test5_2;
public class Person1 {
String name;
float height;
float weight;
//예시2) 멤버 변수 중에서 name,height 변수에 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성하지 않음.
Person1(String pname, float pheight){
name = pname;
height = pheight;
}
/
void show() {
System.out.println("이름 : " + name);
System.out.println("신장 : " + height);
System.out.println("체중 : " + weight);
}
}
package test5_2;
public class Person1_Main {
public static void main(String[] args) {
//name, height 변수에 데이터값을 입력 받아야 객체를 생성해주는 Person1(String pname, float height)을 호출해서 멤버변수들의 데이터값을 초기화함
Person1 p1 = new Person1("가나다", 123.45f);
p1.show();
}
}
ex3) 멤버변수에 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성해주지 않음.
package test5_2;
public class Person1 {
String name;
float height;
float weight;
//예시3) 멤버 변수 모두 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성하지 않음
Person1(String pname, float pheight, float pweight){
name = pname;
height = pheight;
weight = pweight;
}
void show() {
System.out.println("이름 : " + name);
System.out.println("신장 : " + height);
System.out.println("체중 : " + weight);
}
}
package test5_2;
public class Person1 {
String name;
float height;
float weight;
//예시3) 멤버 변수 모두 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성하지 않음
Person1(String pname, float pheight, float pweight){
name = pname;
height = pheight;
weight = pweight;
}
void show() {
System.out.println("이름 : " + name);
System.out.println("신장 : " + height);
System.out.println("체중 : " + weight);
}
}
Person1 p3 = new Person1();
생성자를 직접 구현하여 디폴트 생성자가 없기 때문에 오류가 발생. 생성자가 하나도 없는 경우에만 디폴트 생성자를 제공
package test5_2;
public class Person1 {
String name;
float height;
float weight;
//(일반) 생성자 : 매개변수가 있는 생성자
//반드시 데이터값을 멤버 변수에 넣어줘야만 객체가 생성되는 강제성이 있음
//예시1)멤버 변수 중에서 name 변수에 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성하지 않음.
Person1(String pname){
name = pname;
}
//예시2) 멤버 변수 중에서 name,height 변수에 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성하지 않음.
Person1(String pname, float pheight){
name = pname;
height = pheight;
}
//예시3) 멤버 변수 모두 지정한 데이터값을 넣어주지 않으면 객체(인스턴스)를 생성하지 않음
Person1(String pname, float pheight, float pweight){
name = pname;
height = pheight;
weight = pweight;
}
//기본 생성자(default construct) : 매개변수가 없는 생성자
Person1(){
}
void show() {
System.out.println("이름 : " + name);
System.out.println("신장 : " + height);
System.out.println("체중 : " + weight);
}
}
package test5_2;
public class Person1_Main {
public static void main(String[] args) {
//name 변수에 데이터값을 입력 받아야 객체(인스턴스)를 생성해주는 Person1(String pname)을 호출해서 멤버변수들의 데이터값을 초기화함.
Person1 p = new Person1("가나다");
p.show();
System.out.println("-----------------");
//name, height 변수에 데이터값을 입력 받아야 객체를 생성해주는 Person1(String pname, float height)을 호출해서 멤버변수들의 데이터값을 초기화함
Person1 p1 = new Person1("가나다", 123.45f);
p1.show();
System.out.println("-----------------");
//name, height 변수에 데이터값을 입력 받아야 객체를 생성해주는 Person1(String pname, float height, float weight)을 호출해서 멤버변수들의 데이터값을 초기화함
Person1 p2 = new Person1("가나다", 123.45f, 32.1f);
p2.show();
System.out.println("-----------------");
//생성자를 직접 구현하여 디폴트 생성자가 없기 때문에 오류가 발생
Person1 p3 = new Person1();
p3.show();
}
}
오류가 발생하지 않음.
클래스 내에 생성자가 1개라도 정의되어 있으면 기본 생성자는 컴파일러가 자동으로 추가해주지 않음
정의된 생성자 형식에 맞추어서만 객체가 생성됨. 즉 클래스 내의 생성자가 작성되어 있는지 확인하고 객체(인스턴스)를 생성함
실습1)
//231130
package test5_2;
public class Person2 {
String name;
float height;
float weight;
//1 기본생성자 : 매개변수 없는 생성자
Person2(){};
//2 일반생성자 : 매개변수가 있는 생성자(이름을 입력 받아야만 객체를 생성해주는 일반 생성자)
Person2(String pname){
name = pname;
}
//3 일반생성자 : 매개변수가 있는 생성자(이름,신장을 입력 받아야만 객체를 생성해주는 일반 생성자)
Person2(String pname, float pheight){
name = pname;
height = pheight;
}
//4 일반생성자 : 매개변수가 있는 생성자(이름,신장,체중을 입력 받아야만 객체를 생성해주는 일반 생성자)
Person2(String pname, float pheight, float pweight){
name=pname;
height=pheight;
weight=pweight;
}
void show() {
System.out.println(name);
System.out.println(height);
System.out.println(weight);
}
}
//231130
package test5_2;
public class Person_Main2 {
public static void main(String[] args) {
//기본 생성자 호출해서 객체(인스턴스)를 생성하고 초기화된 멤버 변수 내의 데이터값 출력
System.out.println("1");
Person2 p1 = new Person2();
System.out.println("------------");
//이름을 입력 받아야만 객체(인스턴스)를 생성하는 일반 생성자로 생성하고 초기화된 멤버 변수 내의 데이터값을 출력
System.out.println("2");
Person2 p2 = new Person2("abc");
p2.show();
System.out.println("------------");
//이름,신장을 입력 받아야만 객체(인스턴스)를 생성하는 일반 생성자로 생성하고 초기화된 멤버 변수 내의 데이터값을 출력
System.out.println("3");
Person2 p3 = new Person2("asdf", 123.45f);
p3.show();
System.out.println("------------");
//이름,신장,체중을 입력 받아야만 객체(인스턴스)를 생성하는 일반 생성자로 생성하고 초기화된 멤버 변수 내의 데이터값을 출력
System.out.println("4");
Person2 p4 = new Person2("이순신",175,75f);
p4.show();
}
}
정보 은닉
멤버 변수에 새로운 데이터값을 넣지 못하도록 함. 이때 사용하는 것이 접근 제어자를 사용함
접근제어자
public : 외부 클래스 어디에서나 접근할 수 있음. 접근 제한이 없음
protected : 동일한 패키지 내에서 존재하거나 상속관계의 하위 클래스에서만 접근이 가능
아무것도 없는 경우 : default. 같은 패키지 내부에서만 접근 가능
private : 자신의(같은) 클래스 내부에서만 접근 가능
접근하게 하려면 사용자가 직접 멤버 변수에 접근할 수 있도록 하는 메서드를 만들고 호출해서 사용해야함.
설정자와 접근자 메서드를 작성해서 접근함.
.this(this 키워드)
자기 자신(객체)의 메모리 주소를 나타냄. 객체 자신의 참조가 필요할 경우에 사용
클래스의 멤버 변수의 메서드 안에서만 사용되는 매개변수의 이름이 같은 경우 구분을 명확히 하기 위해서 사용됨.
클래스 내의 멤버에 접근할 수 있음.
//231130
package test5_2;
public class Student {
public int studentID;
public String studentName;
public int grade;
public String address;
//기본 생성자
public Student(){}
//일반 생성자
//멤버 변수 4개의 데이터값을 입력하지 않으면 객체를 생성하지 않음
/*
Student(int sstudentID, String sstudentName, int sgrade, String saddress){
studentID = sstudentID;
studentName = sstudentName;
grade = sgrade;
address = saddress;
}
*/
/*
//멤버변수와 매개변수 이름을 같게 하는데, 매개변수는 아무렇게나 작성해도 됨.
Student(int ID, String Name, int gr, String addr){
//멤버변수 = 매개변수(메서드 내에서만 사용되고 사라지는 변수)
studentID = ID;
studentName = Name;
grade = gr;
address = addr;
}
*/
/*
public Student(int studentID, String studentName, int grade, String address) {
//멤버변수 = 매개변수
//똑같은 변수명이 2개. 변수명이 같을 수는 없음. 구분이 필요 this를 사용함
//this는 자기자신. 맴버변수에 붙힘.
studentID = studentID;
studentName = studentName;
grade = grade;
address = address;
}
*/
public Student(int studentID, String studentName, int grade, String address) {
//this가 지정된 변수는 클래스 내에서 사용되는 멤버 변수라고 표현함
this.studentID = studentID;
this.studentName = studentName;
this.grade = grade;
this.address = address;
}
/*
//다르다
public Student(int studentID, String studentName, int grade, String address) {
studentID = this.studentID;
studentName = this.studentName;
grade = this.grade;
address = this.address;
}
*/
public void show() {
System.out.println("studentID : " + studentID);
System.out.println("studentName : " + studentName);
System.out.println("grade : " + grade);
System.out.println("address : " + address);
}
}
//231130
package test5_2;
public class Student_Main {
public static void main(String[] args) {
//기본생성자 호출해서 객체 생성
Student s = new Student();
s.show();
System.out.println("-------------");
//일반생성자 호출해서 객체 생성
Student s1 = new Student(1, "동명왕", 3, "고구려");
s1.show();
System.out.println("-------------");
}
}
'KDT > Java' 카테고리의 다른 글
231206 Java (0) | 2023.12.06 |
---|---|
231204 Java (0) | 2023.12.04 |
231129 Java (0) | 2023.11.29 |
231127 Java (0) | 2023.11.27 |
231123 Java (0) | 2023.11.23 |