티스토리 뷰
#실습( 저번 시간 복습 )
package constructorex;
class School{
String schName;
String address;
int gradeNumber;
//alt+shift+s->r(setter getter 자동 입력)
public String getSchName() {
return schName;
}
public void setSchName(String schName) {
this.schName = schName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getGradeNumber() {
return gradeNumber;
}
public void setGradeNumber(int gradeNumber) {
this.gradeNumber = gradeNumber;
}
void setSchoolData(String schName, String address, int gradeNumber){
setSchName(schName);
setAddress(address);
setGradeNumber(gradeNumber);
}
void printSchoolInfo(){
System.out.println("학교 이름 : "+schName +"\t 학교 주소 :"+address+"\t 총 학년 수 :"+gradeNumber);
}
}
public class ConstructorTest {
public static void main(String[] args) {
School dae = new School();
dae.setSchoolData("대치 초등학교", "서울시 대치동", 6);
dae.printSchoolInfo();
}
}
클래스{
맴버
1, 변수 (데이터 저장)
2. 메서드(데이터 처리 , 데이터입력, 데이터 추출)
비즈니스메서드 : setter getter
생성자 : 메서드 중에서 객체 생성과 초기값에 관여하는 메서드
}
※ 생성자 메서드 : 생성자는 객체를 만들 떄 필요한 메서드이다
생성자는 1) 리턴 타입을 쓰지 않는다
2) 클래스의 이름을 그대로 메서드 이름에 써야한다
3) 기본 생성자와 인수 생성자로 나뉜다
√ 생성자는 객체를 처음 만들 때 초기값을 넣을 수 있다
√ 기본 생성자 외에 인수를 setting 할 수 있는 "인수 잇는 생성자"도 둘수 있게 된다
√ setter는 기본 생성 이후에 값을 넣는 건데 인수 있는 생성자는 setting 하기 전부터 값을 객체에 넣어놓고 시작할 수 있다
√ "초기화" 를 해놓고 작업을 수행할 수있다.
class A{
int a,m,o,p,q;
//인스턴스 변수(인스턴스를 만들어야 사용할 수 있는 변수
}
public class ConstructorTest {
public static void main(String[] args) {
//생성자는 자동으로 만들어 질 수있다. ( 자동으로 안만들어지기도 함 )
A objA = new A();
//내 안에 방을 만들었다 (생성자가 관여한다)
// 그런데 생성자 없다 --> 컴파일러가 자동으로 생성자가 만들어진다
(기본 생성자, default constructor라고 함)
//객체가없는 인스턴스
new A();
// 임시 메모리 : 객체가 없기 떄믄에 한번 쓰고 버린다 다시는 찾을 수 없다
new A().num=10;
--------------
< 용어 구분 >
int obj=0;
(변수)
School dae= new School();
(객체)
----------------
A unjoo = new A;
//생성자(메서드)--> new 키워드 + 생성자 : "인스턴스"
//인스턴스 : 해당 클래스를 사용하기 위해서 클래스의 변수(0)나 메서드(X)를 메모리에 올려놓는일
※ 자동으로 만들어줌 (하지만 같은 클래스 내에 다른 생성자가 있으면 직접 만들어 주어야 한다 )
(class이름)(){
//매개변수가 없다 기본 생성자 <= 컴파일러가 자동으로 만들어 줌
하지만 다른 생성자가 있으면 자동으로 안 만들어줌
내 손으로 직접 만들어 줘야함
}
package constructorex;
class Person{
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(0<=age && age <=100)
this.age = age;
}
public void printPerson(){
System.out.println(name+"의 나이 : "+age );
}
}
public class ConstructorTest2 {
public static void main(String[] args) {
Person hae = new Person("홍길동",20);
// error 발생 : (The constructor Person(String, int) is undefined)
}
}
<해결 방법>
√ 인자 생성자
- class 안에 기본 생성자 만들어줌
( 단축키 : ctrl + space )
public Person(String name, int age) {
this.name=name;
setAge(age);
}
#다른 문제
package constructorex;
class Person{
String name;
int age;
public Person(String name, int age) {
this.name=name;
setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(0<=age && age <=100)
this.age = age;
}
void printPerson(){
System.out.println(name+"의 나이 : "+age);
}
}
public class ConstructorTest2 {
public static void main(String[] args) {
Person hae =new Person("홍길동", 20);
hae.printPerson();
// hae.name("홍첨지"); // name 의 값을 변경
Person hong=new Person();
//error 발생 : The constructor Person() is undefined
hong.printPerson();
}
}
--> 이미 생성자가 만들어져 있기때문에 자동으로 불러오기가 불가능하다
< 해결 방법 >
√ 기본 생성자
※ class 안에 기본 생성자 생성
public Person() {
name = "미설정";
age = -1;
}
#실습
package constructorex;
import javax.swing.JOptionPane;
class Data{
int num1;
int num2;
int num3;
double num4;
//contructor 단축키 : alt+shift+s-->o
public Data(int num1) {
super();
this.num1 = num1;
}
public Data(int num1, int num2) {
super();
this.num1 = num1;
this.num2 = num2;
}
public Data(int num1, int num2, int num3) {
super();
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
}
Data(int n1, int n2, int n3, double n4){
setNum1(n1);
setNum2(n2);
setNum3(n3);
setNum4(n4);
}
public Data(){
num1=4;
num2=3;
num3=7;
num4=1.2;
}
//setter 생성
public void setNum1(int num1) {
this.num1 = num1;
}
public void setNum2(int num2) {
this.num2 = num2;
}
public void setNum3(int num3) {
this.num3 = num3;
}
public void setNum4(double num4) {
this.num4 = num4;
}
public void printData(){
System.out.println("num1 : "+num1);
System.out.println("num2 : "+num2);
System.out.println("num3 : "+num3);
System.out.println("num4 : "+num4);
}
//이 메서드를 호출하면 변수 4개에 값을 넣을 수 있다.
public void insertData(){
this.num1 = Integer.parseInt(JOptionPane.showInputDialog("데이터1 입력"));
this.num2 = Integer.parseInt(JOptionPane.showInputDialog("데이터2 입력"));
this.num3 = Integer.parseInt(JOptionPane.showInputDialog("데이터3 입력"));
this.num4 = Double.parseDouble(JOptionPane.showInputDialog("데이터4 입력-실수"));
}
}
public class ConstructorTest3 {
public static void main(String[] args) {
Data data = new Data(10, 20, 30, 1.1);
Data data3 = new Data(10);
Data data4 = new Data(10, 20)
Data data5 = new Data(10, 20, 30);
data.printData();
data.setNum1(100); // 10을100으로 변경하겠다
data.setNum2(200); // 20-->200
data.setNum3(300); // 30-->300
data.setNum4(10.1);// 1.1-->10.1
data.printData();
Data data2 = new Data();
data2.printData();
data2.insertData();
data2.printData();
}
}
'Programing > Java' 카테고리의 다른 글
Java1 - 19. Static (0) | 2017.05.02 |
---|---|
Java1 - 18. 만들어져있는 클래스 사용 방법 (0) | 2017.05.02 |
Java1 - 16. private (0) | 2017.04.28 |
Java1 - 15. Method 만들기 (0) | 2017.04.27 |
Java1 - 14. class (0) | 2017.04.26 |