728x90

 

사용 프로그램

java + eclipse

 

메세지

Exception in thread "main" java.lang.Error: Unresolved compilation problem :

The constructor User(String,String) is undefined

 

상황

생성자 매개변수 실험

 

원인

실행 클래스의 매개변수 생성자에서 값 초기화를 3개했는데 

new User() 생성자에서는 매개변수를 2개만 줬기 때문에 에러발생

 

해결

매개변수 2개를 3개로 맞춘다

new User("user1","pass1","pass2")

 

728x90
반응형
728x90

 

 

생성자(constructor)

메소드명이 클래스명과 동일하고 리턴 자료형을 정의하지 않는 메소드

 

new연산자가 heap 메모리에서 생성한 공간에 값을 초기화하는 역할을 하고 나서

생성자가 객체의 필드 초기화시키는 역할

public class Academy { private int studentNo; private String name;
    // 기본 생성자 
    public Academy() {} 

    //매개변수 있는 생성자
    public Academy(int studentNo, String name) {
        this.studentNo = studentNo; 
        this.name = name;
    } 
}
[접근제한자] [예약어] class 클래스명 {
	[접근제한자] 클래스명() { }
	[접근제한자] 클래스명(매개변수) { (this.)필드명 = 매개변수; } 
}

 

 

종류

매개변수 있느냐 없느냐가 기준

 

1)기본 생성자(default constructor)

매개변수가 없는 생성자

작성하지 않은 경우, 클래스 사용 시 JVM이 자동으로 기본 생성자 생성

 

2)매개변수 생성자

매개변수가 있는 생성자

 

1)매개변수를 통해 전달받은 값으로 필드 초기화

    - 매개변수가 있기에 매개변수를 통해서 값을 받을 수 있다

    - 매개변수를 통해 필드 초기화한다는 의미는 값을 넣는다는 의미를 포함한다

2)기본 생성자를 만들어두지 않고 매개변수가 있는 생성자만 만들었을 경우 기본생성자는 자동으로 생성되지 않음

      (매개변수 생성자 작성시, 자동생성x)

3)상속에서 사용시, 반드시 기본생성자 작성

4)오버로딩을 이용하여 작성

 

객체 생성 시 전달받은 값으로 객체를 초기화 하기 위해 사용

  • 매개변수 생성자 작성 시, JVM이 기본 생성자를 자동으로 생성해주지 않음
  • 상속에서 사용 시 반드시 기본 생성자를 작성
  • 오버로딩을 이용하여 작성

 

생성자 규칙

  1. 클래스명과 메소드명이 동일하다.
  2. 리턴타입을 정의하지 않는다. (void도 사용하지 않는다.)

 

특징

생성자(Member())도 메소드의 일종으로 취급

메소드가 아닌 이유 : 생성자의 규칙이 있기 때문

생성자와 메소드의 차이

Member()라고 하는 생성자에도 ()가 들어가있음

*소괄호 ( ) : 매개변수 지정하는 역할

 


 

생성자와 관련된 개념

 

오버로딩(Overloading)

한 클래스 내에 동일한 이름의 메소드를 여러 개 작성하는 기법

 

오버로딩 조건

1)같은 메소드 이름

2)매개변수의 개수 or 타입 or 순서가 달라야함

     반환타입에 영향 안줌

     매개변수에만 영향을 줌

     매개변수명이 다르다고 해도 개수,타입,순서가 같으면 중복에러남

 

this 레퍼런스 변수

예약어로써, 모든 인스턴스 메소드에 숨겨진 채 존재하는 레퍼런스로 할당된 객체를 가리킴

함수 실행 시 전달되는 객체의 주소를 자동으로 받음

  • 인스턴스 자신을 가리키는 참조변수
  • this()생성자와 연관 x
  • 인스턴스 메서드(생성자 포함)에서 사용가능
  • 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용
  • 내 주소값을 가지고 있는 변수
public class Academy{
		private String name; 
		public Academy() { }
		public Academy(String name) { **this.name = name;**  }
}

주황색 name끼리 같은 데이터

파란색 name끼리 같은 데이터

 

위와 같이 매개변수를 가지는 생성자에서 매개변수 명이 필드명과 같은 경우,

매개변수의 변수명이 우선이므로 this 객체를 이용하여 대입되는 변수가 필드라는 것을 구분해줌

 

 

this() 생성자

  • 생성자에서 다른 생성자 호출할 때 사용
  • 다른 생성자 호출 시 첫 줄에서만 사용 가능
public class Academy{
		private int age; private String name;
		public Academy() { **this(20, “김철수”)**; } 
		public Academy(int age, String name) {
				this.age = age;     
				this.name = name;  
		}
}

주황색 name끼리 같은 데이터

파란색 name끼리 같은 데이터

 

728x90
반응형
728x90

 

sql의 테이블 확인하고 

vo의 필드(전역변수) 세팅

필요한 값들을 필드에 넣기

 

package com.kh.test.model;

import java.sql.Date;

public class Test {
	
	public int seq;
	public String writer;
	public String title;
	public String content;
	public Date regDate;
	
	public Test() {}

	public Test(int seq, String writer, String title, String content, Date regDate) {
		super();
		this.seq = seq;
		this.writer = writer;
		this.title = title;
		this.content = content;
		this.regDate = regDate;
	}

	
	public int getSeq() {
		return seq;
	}

	public void setSeq(int seq) {
		this.seq = seq;
	}

	public String getWriter() {
		return writer;
	}

	public void setWriter(String writer) {
		this.writer = writer;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public Date getRegDate() {
		return regDate;
	}

	public void setRegDate(Date regDate) {
		this.regDate = regDate;
	}
	
	

}
728x90
반응형
728x90

 

<이클립스 eclipse 간편단축키>

 

소문자 전체를 대문자로 바꾸는 단축키

ctrl + shift + x

 

코드 자동 생성

alt + shift + s

단축키를 누르면 아래의 창이 뜬다

 

getter & setter 자동 생성

model.vo 클래스에서 필드 부분만 작성 한 후, alt + shift + s해서 Generate Getter and Setter 클릭

아래처럼 자동 생성해준다

 

 

생성자 자동 생성

model.vo 클래스에서 필드 부분만 작성 한 후, alt + shift + s해서 Generate Constructor using Filelds 클릭

 

toString 메소드 자동 생성

model.vo 클래스에서 필드 부분만 작성 한 후, alt + shift + s해서 Generate to String()... 클릭

 

이제 힘들게 model.vo 코드들을 일일히 다 쓸 필요없다. 시간과 에너지를 아끼고 새거 배우는데 집중하자

 

 

728x90
반응형
728x90

 

model.VO

Override toString() + setter/getter

 

package MVC.model.vo;
import java.sql.Date;

public class pModelVo07 {
//  VO : Vaule Object
//		 데이터를 잠시 담아두는 ‘임시 저장공간’
//    	 변수로써 사용
//	 	 Read-Only속성을 값 오브젝트
//   	  자바에서 단순히 값 타입을 표현하기 위해 불변 클래스(Read-Only)를 만들어 사용

	private int empNo; // 사번
	private String empName; // 이름
	private String job; // 직책
	private int mgr; // 직속 상사(manager)
	private Date hireDate; // java.sql.Date // 고용일
	private int sal; // 급여
	private int comm; // 커미션(인센티브)
	private int deptNo; // 부서번호

	
	public pModelVo07() {}
	public pModelVo07(String job, int sal, int comm) {
		this.job = job;
		this.sal = sal;
		this.comm = comm;
	}
	public pModelVo07(int empNo, String job, int sal, int comm) {
		this(job, sal, comm);
		this.empNo = empNo;
	}
	public pModelVo07(int empNo, String empName, String job, int mgr, int sal, int comm, int deptNo) {
		this(job,sal,comm);
		this.empNo = empNo;
		this.empName = empName;
		this.mgr = mgr;
		this.deptNo = deptNo;
	}
	public pModelVo07(int empNo, String empName, String job, int mgr, Date hireDate, int sal, int comm, int deptNo) {
		this(job,sal,comm);
		this.empNo = empNo;
		this.empName = empName;
		this.mgr = mgr;
		this.deptNo = deptNo;
		this.hireDate = hireDate;
	}
	
	public int getEmpNo() {
		return empNo;
	}
	public String getEmpName() {
		return empName;
	}
	public String getJob() {
		return job;
	}
	public int getMgr() {
		return mgr;
	}
	public Date getHireDate() {
		return hireDate;
	}
	public int getSal() {
		return sal;
	}	
	public int getComnn() {
		return comm;
	}
	public int getDeptNo() {
		return deptNo;
	}
	
	public void setEmpNo(int empNo) {
		this.empNo = empNo;
	}
	public void setEmpName(String empName) {
		this.empName = empName;
	}
	public void setMgr(int mgr) {
		this.mgr = mgr;
	}
	public void setHireDate(Date hireDate) {
		this.hireDate = hireDate;
	}
	public void setSal(int sal) {
		this.sal = sal;
	}
	public void setComm(int comm) {
		this.comm = comm;
	}
	public void setDeptNo(int deptNo) {
		this.deptNo = deptNo;
	}
	
	
	@Override
	public String toString() {
		return empNo+" / "+empName+" / "+job+" / "+mgr+" / "+hireDate+" / "+sal+" / "+comm+" / "+deptNo+" / ";
	}
	
}
728x90
반응형
728x90

 

 

생성자(constructor)는 두 종류가 있다

기본 생성자와 매개변수가 있는 생성자

 

아래의 코드에는 기본 생성자가 없다

아래 코드의 기본생성자를 써보면 public Circle() {}이 된다

 

Run클래스에서

Circle c = new Circle();을 그대로 쓸려면 기본 생성자가 있어야하고

본래 이미지처럼 기본 생성자 없이 Circle 클래스에서 쓸려면

Run클래스에서 Circle c = new Circle();에서 소괄호()부분에 매개변수를 넣어줘야한다

로직이 이렇게 연결되어있다

 

 

728x90
반응형
728x90

 

생성자(constructor)

인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 메서드’하는 역할

이외에도 메서드이기 때문에 {}에 작업할 내용을 넣으면 됨

모든 클래스에는 반드시 하나의 생성자가 있어야한다

 

ex) iv 초기화 예시

Time t = new Time();  // 생성자
t.hour = 12;    // 인스턴스 메소드(iv) 초기화
t.minute = 34;  // 인스턴스 메소드(iv) 초기화
t.second = 56;  // 인스턴스 메소드(iv) 초기화

 

 

생성자의 필요성

위처럼 객체생성 후 iv 초기화를 해야하므로 번거롭다

한 줄로 할 수 있다면 직관적이고 편리할 것

 

생성자 예시

	Time t = new Time(12,34,56); // 생성자

위의 4줄이 1줄로

 

생성자 호출이라는 의미

생성자 불러다 썼다는 의미

 

 

생성자의 규칙

1) 클래스명과 생성자명이 같아야한다

2)항상 리턴값이 없다(void 안붙인다)

 

 

 

1) 클래스명과 생성자명이 같아야한다

    같은 이름이 존재할 수 있는건 오버로딩이 가능하기 때문

2)항상 리턴값이 없다(void 안붙인다)

 

 

 

1.기본 생성자(default constructor)

생성자가 하나도 없을 때만 컴파일러가 자동 추가

생성자는 원래는 직접 값을 넣어줘야한다

기본생성자를 안넣어주면 에러메세지가 다른게 나오기에 찾기 힘들다

Card c = new Card(); // 기본생성자

 

 

기본생성자 에러

class Data_1도 생성자가 없지만 에러가 안나는건 값을 안넣어줬기 때문이고, Class Data_2에는 Data_2(int x)라는 값을 임의로 넣어줬기 때문에 생성자도 따로 지정해줬어야 했는데 안했기에 에러가 난 것

 

2.매개변수가 있는 생성자

 

매개변수 생성자가 필요한 이유

4줄이 1줄로

 

Car c = new Car(”while”,”auto”,4); 문장이 실행되는 과정

 

1)참조변수 C가 생성됨

2)new연산자가 객체 및 주소값 생성

3)생성자 호출되면서 객체 초기화

4)변수(Car c)에 주소값이 들어감

 

 

1)참조변수 C가 생성됨

2)new연산자가 객체를 만들고 객체에 주소값 부여

       (객체 멤버 3개 : color, geartype, door)

각 객체 멤버에 데이터타입의 기본값 들어가 있음(String은 null int는 0)

 

3)생성자가 호출되면서 객체를 초기화시킴

생성자 호출로 white, auto, 4의 값이 color, geartype, door로 들어감

 

초기화란?

자기가 원하는 값을 처음으로 넣는 것을 초기화라 부름

 

4)마지막으로 Car c에 주소값이 들어감

객체와 참조변수 연결해야하니까 대입연산자( = )가 객체의 주소를 저장한다

객체의 주소값은 new연산자의 반환값

 

728x90
반응형
728x90

 

 

 

728x90
반응형
728x90

 

 

 

실행 클래스

package com.kh.example.practice5.run;

import com.kh.example.practice5.model.vo.Employee;

public class Run {
	public static void main(String[] args) {

		Employee e = new Employee();
		e.setEmpNo(100);
		e.setEmpName("홍길동");
		e.setDept("영업부");
		e.setJob("과장");
		e.setAge(25);
		e.setGender('남');
		e.setSalary(2500000);
		e.setBonusPoint(0.05);
		e.setPhone("010-1234-5678");
		e.setAddress("서울시 강남구");
				
		e.getEmpNo();
		e.getEmpName();
		e.getDept();
		e.getJob();
		e.getAge();
		e.getGender();
		e.getSalary();
		e.getBonusPoint();
		e.getPhone();
		e.getAddress();
		
		int eNo = e.getEmpNo();
		String eName = e.getEmpName();
		String dept_ = e.getDept();
		String job_ = e.getJob();
		int age_= e.getAge();
		char gender_ = e.getGender();
		int salary_ = e.getSalary();
		double bonus_ = e.getBonusPoint();
		String phone_ = e.getPhone();
		String addrs = e.getAddress();
		
		System.out.println("empNo : " + eNo);
		System.out.println("empName : " + eName);
		System.out.println("dept : " + dept_);
		System.out.println("job : " + job_);
		System.out.println("age : " + age_);
		System.out.println("gender : " + gender_);
		System.out.println("salary : " + salary_);
		System.out.println("bonus : " + bonus_);
		System.out.println("phone : " + phone_);
		System.out.println("address : " + addrs);
		
	}

}

기능클래스

package com.kh.example.practice5.model.vo;
public class Employee {
	
	private int empNo;
	private String empName;
	private String dept;
	private String job;
	private int age;
	private char gender;
	private int salary;
	private double bonusPoint;
	private String phone; 
	private  String address;
	
	// 기본 생성자
	public Employee() {

	}
	
	public Employee(int empNo, String empName) {
		this.empNo = empNo;
		this.empName = empName;
	}
	public Employee(int empNo, String empName, String dept, String job,	int age, 
			char gender, int salary, double bonusPoint, String phone, String address) {
		this.empNo = empNo;
		this.empName = empName;
		this.dept = dept;
		this.job = job;
		this.age = age;
		this.gender = gender;
		this.salary = salary;
		this.bonusPoint = bonusPoint;
		this.phone = phone;
		this.address = address;
	}
	
	// setter
	public void setEmpNo(int empNo) {
		this.empNo = empNo;
	}
	public void setEmpName(String empName) {
		this.empName = empName;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
	public void setJob(String job) {
		this.job = job;
	}	
	public void setAge(int age) {
		this.age = age;
	}
	public void setGender(char gender) {
		this.gender = gender;
	}	
	public void setSalary(int salary) {
		this.salary = salary;
	}
	public void setBonusPoint(double bonusPoint) {
		this.bonusPoint = bonusPoint;
	}	
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
	
	// getter
	public int getEmpNo() {
		return empNo;
	}
	public String getEmpName() {
		return empName;
	}
	public String getDept() {
		return dept;
	}
	public String getJob() {
		return job;
	}	
	public int getAge() {
		return age;
	}
	public char getGender() {
		return gender;
	}	
	public int getSalary() {
		return salary;
	}
	public double getBonusPoint() {
		return bonusPoint;
	}
	public String getPhone() {
		return phone;
	}
	public String getAddress() {
		return address;
	}
	
	
	
}

 

 

728x90
반응형
728x90

 

 

실행 클래스(런파일, 메인메소드)

package com.kh.example.practice4.run;
import com.kh.example.practice4.model.vo.Book;

public class Run {

	public static void main(String[] args) {

		Book b1 = new Book();
//		b1.inform();
				
		Book b2 = new Book("책1","출판사1","저자1");
//		b2.inform();
			
		Book b3 = new Book("책2","출판사2","저자2",10000,0.3);
		b3.inform();
				
	}
}

 

기능 클래스

package com.kh.example.practice4.model.vo;

public class Book {
	
	private String title;
	private String publisher;
	private String author;
	private int price;
	private double discountRate;
	
	// 기본 생성자
	public Book() {
				
	}
	
	// 매개변수 3개인 생성자
	public Book(String title, String publisher, String author) {
		this.title = title;			// 값넣기까지 초기화 // 값을 대입시키는게 초기화
		this.publisher = publisher;
		this.author = author;
	}
	
	// 매개변수 5개인 생성자
	public Book(String title, String publisher, String author, 
				int price, double discountRate) {
		this.title = title;
		this.publisher = publisher;
		this.author = author;
//		this(title,publisher,author); 위의 세줄과 같은 코드
		this.price = price;
		this.discountRate = discountRate;
		
	}
	
	public void inform() {
		System.out.printf(" title : %s%n publisher : %s%n author : %s%n price : %d%n 할인율 : %f",title,publisher,author,price,discountRate);
	}	
}

 

728x90
반응형

+ Recent posts