생성자
생성이 될 때 호출 되는 자
생성 = 클래스가 생성될때
클래스 만들기
User 라는 이름의 class를 만들어준다
디폴트 생성자- 기본생성자는 숨겨져 있다.
하지만 생성자를 만드는 순간 디폴트생성자는 지워진다
지우진 생성자는 직접 써주어야한다.
여기서 생성자 이름은 클래스 이름과 일치해야 된다.
생성자 : 접근제한자 + 클래스명() {}
누군가에 의해 new로 생성될 때 가장 먼저 실행하게 됨
생성자의 구성
user 클래스의 정보(변수) 생성
클래스가 생성이 되었을 때 변수들 초기화시키기(생성한 정보들이 들어갈 공간이 있어야함)
// 붕어빵 틀이라고 생각하기
public class User {
String name;
int age;
String hobby;
// 클래스의 생성자
public User (String _name, int _age, String _hobby) {
// 다른 곳에서 user라는 클래스가 어디선가 생성이 될 때 입력받을 수 있는 매개변수 만들기
name = _name; // 어디선가 입력받아온 값을 User 클래스의 변수들에 저장
age = _age;
hobby = _hobby;
}
// 밑에 main함수는 지금은 필요 없어서 생략.
// public static void main(String[] args) {
//
// }
}
생성자를 굳이 치지않아도 쉽게 만드는 법
Source 탭 클릭
생성자에 어떤 파라미터를 넣어서 만들래? 선택한 후 Generate 클릭
결과 > 쉽게 생성자를 만들수 있음
// 붕어빵 틀
public class User {
String name;
int age;
String hobby;
// 클래스의 생성자
public User(String name, int age, String hobby) {
super();
this.name = name;//여기서 this는 자신의 클래스의 변수들을 가르킴(매개변수들과 구분지어줄 때 사용)
this.age = age;
this.hobby = hobby;
}
}
Exam01파일 생성 - 클래스 생성 > User클래스를 생성
new User();
public class Exam01 {
public static void main(String[] args) {
// 생성자 파라미터(매개변수)에 맞게 인자를 삽입해준다.
// 붕어빵 틀을 이용해서 활용
User user = new User("백민주",27,"오버워치");// User클래스 생성, 실제 값들 넣어주기
User user2 = new User("백민주",27,"오버워치");// User클래스 생성, 실제 값들 넣어주기
User user3 = new User("백민주",27,"오버워치");// User클래스 생성, 실제 값들 넣어주기
User user4 = new User("백민주",27,"오버워치");// User클래스 생성, 실제 값들 넣어주기
}
}
name, age, hobby 출력하기
게터 &세터
값을 따로 넣어주고싶을때 사용
User 클래스를 생성 , 빈 값으로 생성!
public class Exam01 {
public static void main(String[] args) {
// User 클래스를 빈 값으로 생성
User user = new User();
}
}
User class 생성자
// 붕어빵 틀
public class User {
String name;
int age;
String hobby;
// 디폴트 생성자
public User() {}
}
게터 세터 쉽게 만들기
Source 탭 클릭
선언되어있는 변수들 중에 getter setter 만들고싶은 변수들 선택
getter setter 만들어진거 확인
// 붕어빵 틀
public class User {
String name;
int age;
String hobby;
// 디폴트 생성자
public User() {}
// 게터 세터 영역
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
게터,세터 이용해서 값 출력하기
public class Exam01 {
public static void main(String[] args) {
// User 클래스를 빈 값으로 생성
User user = new User();
user.setName("홍길동");
// User클래스에 setName으로 이동
// 홍길동을 this.name에 저장
System.out.println(user.name);
// 출력하면 위에서 저장한 홍길동 출력
System.out.println(user.getName());
// getName()으로 출력하는 방법도 있음
}
}
생성자 정리
생성자(Constructor) : 메서드의 한 종류로 몇가지 특이한 규칙을 가짐
1. 생성자 메서드의 이름은 클래스 이름과 같아야 함.
2. 메서드 호출 시점을 자유롭게 할 수 없다.( 불려지는 시점이 정해져 있음)
3. 생성자 메서드는 반환값을 가지지 않는다.(return 값이 없음)
4. 기타 모든 규칙은 일반 메서드와 동일하다( 매개변수, 접근제한자)
Main.java
package exams;
import classes.Computer;
public class minjoocoding {
public static void main(String[] args) {
// 객체 지향 문법 사용 Steps
// 1. 만들고자 하는 대상의 선택
// 순서대로 생각-> 절차지향적 사고, 필요한 객체가 무엇일까-> 객체 지향적 사고
// 2. 대상에 대한 분석(추상화)
// 속성: 대상을 구성하는 정보들
// 기능 : 대상이 수행할 수 있는 능력
// 3. 설계도 작성
// > 설계도 = Class
// 속성과 동작만을 추려내어 설계하는 문법을 class
// 메모리에 형성된 상태는 아니며 단순히 정의된 자료형이다.
// Class Monitor{ }
// 4. 대상의 인스턴스
// 가변적이고 큰 자료들은 heap 을 써야함
// Monitor lg;
// 자료형 (Monitor) 변수(lg) = 자료형 변수
// 근데 지금 여기선 new를 사용하지 않아 stack 에만 저장되어있다.
// 지금 이 상태는 모니터의 주소를 저장하기 위한 참조변수를 만든 것이다.
// stack 메모리에 lg라는 무언가가 만들어짐
// new Monitor();
// heap 메모리에 생성
// Monitor라는 설계도(Class)를 따라 무언가를 만들어주세요
// 객체화 : 힙 메모리상에 객체 생성해주는 명령어 new
// new를 통해 만들어진 heap 메모리상의 인스턴스
// 메모리에 실제 형성되었으며 형성된 공간을 .(참조연산자)를 통해 접근하여 사용 가능
Monitor lg = new Monitor();
// monitor instance의 주소를 알고 있는 건 lg
// instance는 heap 메모리에서만 만들 수 있다. 가변적이고 크키가 크기 때문
// lg.
// 변수 뒤 .은 참조 연산자.
// 점 앞의 대상의 주소를 찾아가는것이 참조 연산자
// 우리가 설계한 대로 만들어 놓은, 자기가 제공할 수 있는 값을 보여준다.
// *설계도를 바탕으로 만들어놨고 설계도를 바탕으로 실체화된 것을 instance라고 한다.
// *heap이라는 메모리에 있는 게 instance,객체라고 한다.
Computer mycom = new Computer("yellow",100000,2);
//여기서 자료형 Computer는 클래스 이름과 같아야하는가?
System.out.println(mycom.color);
System.out.println(mycom.price);
System.out.println(mycom.weight);
// 클래스의 필드명이 private으로 되어있으면 접근이 불가능하다.->getter,setter 메서드이용
// getter와 setter 사용 예시
// Computer mycom = new Computer();
// mycom.setColor("black");
// System.out.println(mycom.getColor());
}
}
Monitor.java
package classes;
public class Monitor {
// 모니터를 구성하는 속성과 기능
// 속성은 변수로
// 기능은 메서드로 구현한다.
private int price;
private double weight;
private String color;
//이게 생성자
public Monitor(String color, int price, double weight) {
this.color=color;
this.price =price;
this.weight=weight;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
Default Value 문법
배열 인스턴스
'2024_풀스택학원 > Back-end' 카테고리의 다른 글
[Java] ArrayList (0) | 2024.04.09 |
---|---|
[Java] 상속 (0) | 2024.04.08 |
[Java] Method (0) | 2024.04.02 |
[Java] 제어문 (0) | 2024.03.28 |
[JAVA] 변수와 자료형 (1) | 2024.03.26 |