java class 예제

limchard·2023년 10월 26일
0

java

목록 보기
37/48

기본 예제

  • 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

3개를 한번에 수정할 수 있는 메서드

  • 3개를 한번에 수정 및 변경할 수 있는 방법이다.
  • 명시적 생성자를 사용하여 set,get 작성 당시 인자값을 바로 입력할 수 있도록 하고, 출력문까지 입력하여 main class에서는 set,get으로 간단하게 사용할 수 있다.
  • // 으로 주석처리해놓은 것 끼리도 출력이 가능하다. 결과값은 setData의 인자값대로 나오며, 차이는 Myshop class에서 return값을 주고 출력문을 main class에서 작성한 것이다.
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

getInstance (꼭 알 필요는 없음)

  • 위에는 우리가 java에서 calendar 메서드를 import하여 사용할 시에는 getInstance 를 사용하고, Scanner를 사용할 때에는 new를 사용한다. 이것의 차이점에 대해 한번 알아보는 시간이다.
  • 둘 다 틀린것은 아니다. 메서드를 처음 만든 사람이 어떤식으로 정했냐의 차이이다. 크게 신경쓸 필요는 없다고 한다.
  • 또한 new로 사용하는것이 거의 99%라고 하니 참고만 하자.
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();
    }
}

결과

디폴트 생성자
안녕?
디폴트 생성자
안녕?

static 변수와 인스턴스 변수의 차이(class)

  • static 변수와 인스턴스 변수의 차이를 알아보자.
  • 인스턴스 변수는 객체생성 후 각각 지정해줘야 한다.
  • static 변수는 여러객체가 같은 값을 가져야 하는 경우 지정된 값으로 여러번 사용 가능하다.
  • 위의 결과값을 보면 더 명확히 알 수 있다. static 변수는 계속하여 공유가 가능하기에 숫자가 쌓이는 반면, 인스턴스변수는 그때그때 각각 지정 및 사용되어 주어진 값만 그때그때 출력된다.
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

class 배열(array)로 처리하기

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학년
-----------------------------------------
  • class를 배열로 해결하는 법이다.
  • 배열 생성과 출력시 for문을 사용하는데 주의하자.

class를 통으로 method에 가져와 해결하는 법

  • public static void writeApple(Apple apl) 라고 method를 생성한다. 괄호안의 인자를 보면 (클래스명 변수) 이다. 앞의 클래스명은 멤버변수, set, get이 있는 class이름이고, 변수는 내가 정하는 것이다.
  • writeApple method에서 내가 지정한 apl 변수를 이용하여 Apple class에서 set,get에 사용된 멤버변수를 그대로 가져와 사용 가능하다.
  • 위와 같이 하면 main변수에서 writeApple method를 호출하여 바로 print가 가능하다.
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 클래스 출력***
작성자: 스티브잡스
제목: 애플 너무 비싸요
profile
java를 잡아...... 하... 이게 맞나...

0개의 댓글