main 위쪽에 변수를 선언한다. 그렇게 선언하면 class를 넘어가서도 사용 가능하다. 이번에 배울 class 내용의 경우 팀프로젝트 할때 유용하게 사용할 것 같다.
static final String TITLE="중간고사 시험결과"; 를 보자. TITLE은 상수로 전체 대문자로 입력했다. 이건 개발자들 끼리의 약속이라고 한다. static이 들어갔으니 공유할 것이고(아래에서 다룰 예정), final을 붙히면 최종판. 즉 수정이 불가능하다는 뜻이다.
private 지정하면.. set,get 기본으로 적용 한다. 이유는 private으로 지정하면 인스턴스 변수를 바로 사용 불가능하다고 한다. 즉 String stuName; stuName=”임형준” 이런 식으로 바로 사용 불가능하다고 한다. 이게 추후 오타 가능성이나 변경 가능성을 줄여줄 수 있어서 현업에서는 private을 주로 사용한다고 한다.
setter는 불러오는 값이고, getter는 출력문이라 생각하면 편하다.
cmd+n을 눌러서 get,set을 자동입력할 수도 있다. 자동입력하면 위의 // 자동 getter, setter 불러오자. 와 같이 입력된다.
setter,getter의 생성자가 default 값이므로 출력문을 작성 할 main 에서 불러오는 set, return 해주는 get을 해줘야 한다.
아래에 명시적 메서드방식(3개를 한번에 변경)을 사용시 setter, getter에 수식을 잘 걸어놓고 지정을 잘 해놓으면 main에서 출력이 편해 잘 사용할 것 같지만, 명시적메서드방식의 경우 한가지라도 틀어지면setter,getter에 지정된 수식을 사용할 수 없기에 현업에서는 기본적인 setter, getter만 지정하고, main에서 출력문 작성시에 수정하는 방식으로 많이 진행한다고 한다.
명시적생성자는 직관적으로 기입하지만, get set 자동입력을 주로 하기에 디폴트생성자를 주로 사용한다고 한다.
package Day0628;
/* 중간고사 시험결과
학생명: 임형준
자바점수: 99
오라클점수: 88
html점수:56
==============================
*/
class Score{
private String stuName;
private int java;
private int oracle;
private int html;
static final String TITLE="중간고사 시험결과";
// 자동 setter,getter 불러오자.
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
public int getOracle() {
return oracle;
}
public void setOracle(int oracle) {
this.oracle = oracle;
}
public int getHtml() {
return html;
}
public void setHtml(int html) {
this.html = html;
}
// 합계메서드
public int getTot() {
int t=java+oracle+html;
return t;
}
// 평균메서드
public double getAvg() {
double a=getTot()/3.0;
return a;
}
}
public class ExObject_07 {
public static void main(String[] args) {
Score m1=new Score();
m1.setStuName("임형준");
m1.setJava(97);
m1.setOracle(99);
m1.setHtml(98);
System.out.println("***"+Score.TITLE+"***");
System.out.println("학생이름: "+m1.getStuName()+"\\n자바점수: "+m1.getJava()+"\\n오라클점수: "+m1.getOracle()+"\\nHTML점수: "+m1.getHtml()+"\\n합계점수: "+m1.getTot()+"\\n평균점수: "+m1.getAvg());
System.out.println("=====================================================");
Score m2=new Score();
m2.setStuName("이성신");
m2.setJava(100);
m2.setOracle(100);
m2.setHtml(100);
System.out.println("학생이름: "+m2.getStuName()+"\\n자바점수: "+m2.getJava()+"\\n오라클점수: "+m2.getOracle()+"\\nHTML점수: "+m2.getHtml()+"\\n합계점수: "+m2.getTot()+"\\n평균점수: "+m2.getAvg());
System.out.println("=====================================================");
Score m3=new Score();
m3.setStuName("진현규");
m3.setJava(23);
m3.setOracle(42);
m3.setHtml(11);
System.out.println("학생이름: "+m3.getStuName()+"\\n자바점수: "+m3.getJava()+"\\n오라클점수: "+m3.getOracle()+"\\nHTML점수: "+m3.getHtml()+"\\n합계점수: "+m3.getTot()+"\\n평균점수: "+m3.getAvg());
System.out.println("=====================================================");
Score m4=new Score();
m4.setStuName("최성현");
m4.setJava(89);
m4.setOracle(87);
m4.setHtml(79);
System.out.println("학생이름: "+m4.getStuName()+"\\n자바점수: "+m4.getJava()+"\\n오라클점수: "+m4.getOracle()+"\\nHTML점수: "+m4.getHtml()+"\\n합계점수: "+m4.getTot()+"\\n평균점수: "+m4.getAvg());
}
}
결과
***중간고사 시험결과***
학생이름: 임형준
자바점수: 97
오라클점수: 99
HTML점수: 98
합계점수: 294
평균점수: 98.0
=====================================================
학생이름: 이성신
자바점수: 100
오라클점수: 100
HTML점수: 100
합계점수: 300
평균점수: 100.0
=====================================================
학생이름: 진현규
자바점수: 23
오라클점수: 42
HTML점수: 11
합계점수: 76
평균점수: 25.333333333333332
=====================================================
학생이름: 최성현
자바점수: 89
오라클점수: 87
HTML점수: 79
합계점수: 255
평균점수: 85.0
package Day0628;
class MyShop{
private String sangpumName;
private String ipgoday;
private String chulgodaty;
// 3개의 데이터를 한번에 수정할수 있는 메서드
public void setData(String name,String ip,String chul) {
sangpumName = name;
ipgoday = ip;
chulgodaty = chul;
}
// 3개의 데이터를 한번에 출력할수 있게 메서드
public void getData() { // return 값은 String or int, 출력문은 void
System.out.println("상품명: "+sangpumName+"\\n입고일: "+ipgoday+"\\n출고일: "+chulgodaty);
}
// public String getData() {
// String s="상품명: "+sangpumName+"\\t입고날짜: "+ipgoday+"\\t출고일: "+chulgodaty;
// return s;
// }
}
////////////////////////////////////////////////////////////////////////////////////////////////
public class QuizShop_05 {
public static void main(String[] args) {
MyShop in1=new MyShop();
in1.setData("키보드","2023-06-01","2023-08-30");
in1.getData();
MyShop in2=new MyShop();
in2.setData("마우스","2023-06-04","2023-10-23");
in2.getData();
// MyShop in3=new MyShop();
// in3.setData("키보드","2023-06-01","2023-08-30");
// System.out.println(in3.getData());
//
// MyShop in4=new MyShop();
// in4.setData("마우스","2023-06-04","2023-10-23");
// in4.getData();
// System.out.println(in4.getData());
}
}
결론
상품명: 키보드
입고일: 2023-06-01
출고일: 2023-08-30
상품명: 마우스
입고일: 2023-06-04
출고일: 2023-10-23
package Day0628;
class Test{
public Test() {
System.out.println("디폴트 생성자");
}
// 생성자 대신 인스턴스를 반환해주는 메서드를 만들어준다.
public static Test getInstance(){
return new Test(); // 괄호 안에 생성자 명...??
}
// 일반메서드
public void writeMessage(){
System.out.println("안녕?");
}
}
/////////////////////////////////////////////////////
public class ConstGetInstance_02 {
public static void main(String[] args){
// new로 할 수 있게
Test t1=new Test();
t1.writeMessage();
////////////////////////////////////////////
Test t2=Test.getInstance();
t2.writeMessage();
}
}
결과
디폴트 생성자
안녕?
디폴트 생성자
안녕?
package Day0628;
class Test2{
int n=0;
static int cnt=0;
public Test2(){
System.out.println("생성자 호출");
n++;
cnt++;
}
public void write(){
System.out.println("cnt="+cnt+"\\tn="+n);
}
}
public class VarTest_03 {
public static void main(String[] args) {
Test2 t1=new Test2();
t1.write();
Test2 t2=new Test2();
t2.write();
Test2 t3=new Test2();
t3.write();
}
}
결론
생성자 호출
cnt=1 n=1
생성자 호출
cnt=2 n=1
생성자 호출
cnt=3 n=1
package Day0628;
class Student{
private String sname;
private String hp;
private int grade;
// 생성자에서 초기값 주기(명시적 생성자)
public Student(String name,String hp, int grade) {
this.sname=name;
this.hp=hp;
this.grade=grade;
}
// 멤버값 출력데이터
public void getData(){
System.out.println("이름: "+sname);
System.out.println("연락처: "+this.hp);
System.out.println("학년: "+grade+"학년");
}
}
///////////////////////////////////////////////////
public class ArrayObject_09 {
public static void main(String[] args) {
// Student[] stu=new Student[3];
//
// stu[0]=new Student("임형준","010-3333-4444",3);
// stu[1]=new Student("이성신","010-2222-1111",4);
// stu[2]=new Student("진현규","010-1234-1234",1);
//
// 생성하면서 바로 초기화
Student[] stu={new Student("임형준","010-3333-4444",3),
new Student("이성신","010-2222-1111",4),
new Student("진현규","010-1234-1234",1)
};
// 출력#1
for(int i=0;i<stu.length;i++){
// Student s=stu[i]; // class 명 통째로..?? 암튼 45번 라인 대신해서 42~44 라인으로 사용 가능.
// s.getData();
stu[i].getData();
System.out.println("----------------------------------------");
}
// 출력#2 (for~each문)
// for(클래스명 참조변수명:배열명)
for(Student s1:stu){
s1.getData();
System.out.println("-----------------------------------------");
}
}
}
결론
이름: 임형준
연락처: 010-3333-4444
학년: 3학년
----------------------------------------
이름: 이성신
연락처: 010-2222-1111
학년: 4학년
----------------------------------------
이름: 진현규
연락처: 010-1234-1234
학년: 1학년
----------------------------------------
이름: 임형준
연락처: 010-3333-4444
학년: 3학년
-----------------------------------------
이름: 이성신
연락처: 010-2222-1111
학년: 4학년
-----------------------------------------
이름: 진현규
연락처: 010-1234-1234
학년: 1학년
-----------------------------------------
package Day0628;
class Apple{
private String writer;
private String subject;
private static String msg="HappyDay!!";
// 각각의 set,get
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public static String getMsg() {
return msg;
}
public static void setMsg(String msg) {
Apple.msg = msg;
}
}
///////////////////////////////////////////////
public class ExObject_08 {
public static void writeApple(Apple apl) { // Apple이라는 Class 자체를 통째로 가지고 온다. apl은 그냥 내가 지정한 변수.
System.out.println("***Apple 클래스 출력***");
System.out.println("작성자: "+apl.getWriter());
System.out.println("제목: "+apl.getSubject());
}
public static void main(String[] args) {
System.out.println("Apple 클래스의 메세지 출력");
System.out.println(Apple.getMsg());
Apple a1=new Apple();
a1.setWriter("김은희");
a1.setSubject("악귀 재밌더라구요");
Apple a2=new Apple();
a2.setWriter("스티브잡스");
a2.setSubject("애플 너무 비싸요");
// writeApple 호출
writeApple(a1);
writeApple(a2);
}
}
결론
Apple 클래스의 메세지 출력
HappyDay!!
***Apple 클래스 출력***
작성자: 김은희
제목: 악귀 재밌더라구요
***Apple 클래스 출력***
작성자: 스티브잡스
제목: 애플 너무 비싸요