2021.01.27 국비교육 18일차

[TOC]

초기화블록

  • 생성자와 비슷한 역할의 초기화 작업을 할 수 있음

  • 인스턴스 초기화블록

    • 객체 생성 할 때마다 수행
  • static 블록

    • 프로그램 시작시 단 한번 수행
package com.test;

public class Ex05_20 {

    public Ex05_20(){
        System.out.println("Ex05_20 생성자");
    }

    static {
        System.out.println("static 블록은 프로그램 실행시 실행");
    }

    {
        System.out.println("instace 블록은 객체 생성시 실행");
    }



    public static void main(String[] args) {
        System.out.println("main 메소드 실행");
        Ex05_20 ex = new Ex05_20();
        Ex05_20 ex2 = new Ex05_20();
    }
}

싱글톤

  • 자바의 디자인 패턴중 일반적으로 가장 많이 알려진 패턴으로서 하나의 인스턴스만을 생성하기 위한 패턴
package com.bank;

public class Bank_Single { // 객체 생성 단 한번만 됨

    private static Bank_Single b = new Bank_Single(); // 2. static 변수로 자신의 클래스 객체 생성
    private String name;

    private Bank_Single() {} //1. 생성자를 public -> private으로 변경, 다른 클래스에서 new 안됨


    public static Bank_Single getBank() { //3. 생성된 객체를 필요한곳에 리턴시키는 static get메소드 작성
        return b;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
import com.bank.Bank_Single;

public class Test_Single {

    public static void main(String[] args) {

        //Bank_Single b = new Bank_Single(); 호출 불가

        Bank_Single bank = Bank_Single.getBank();

        System.out.println(bank);

        Bank_Single bank2 = Bank_Single.getBank();
        System.out.println(bank2);

        bank.setName("국민은행");
        System.out.println(bank2.getName());
        //bank와 bank2의 주소 같음
    }

}

final

package com.test;

final class A{}

//class AA extends A{} // fianl지정자로 정의된 클래스는 상속 불가

class B{
    public final void print() {}
}

class BB extends B{
    //public void print(){} // final 지정자로 정의된 메소드는 오버라이딩 불가
}


class C {
    public static final int NUM = 100;
}

public class Ex05_23 {

    public static void main(String[] args) {
        System.out.println(C.NUM); 
        //public static지정자를 사용하여외부에서 객체생성 없이 상수를 쉽게 사용하도록 구현
        //c.NUM = 40; // final 지정자로 정의된 상수는 값 변경 불가

    }

}

vargars(가변인자)

  • vargars를 사용하면 인자의 개수가 반드시 일치하지 않아도 됨
package com.test;

class VarTest{

    public VarTest(int ...x) {
        System.out.println("생성된 인자의 갯수 : " + x.length);
    }


    public void sayEcho(String ...name) {
        for(int x =0; x < name.length; x++) {
            System.out.print(name[x] + "\t");
        }
        System.out.println("");
    }

}


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

    VarTest var = new VarTest(10);
    VarTest var2 = new VarTest(10, 20);
    VarTest var3 = new VarTest(1,2,3,4,5);

    var.sayEcho("홍길동");
    var.sayEcho("서울", "부산");
    var.sayEcho("여름", "가을", "겨울");

    }
}

배열 with 클래스

package com.test;

public class Cat {
    String name;

    public Cat(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public Cat() {

    }
}
package com.test;

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

        //1. new 이용
        Cat [] cats = new Cat[3];
        cats[0] = new Cat("나비");
        cats[1] = new Cat("야옹이");
        cats[2] = new Cat("점박이");

        //2.리터럴 이용
        Cat [] cats2 = { new Cat("나비"),
                         new Cat("야옹이"),
                         new Cat("점박이"),
                         new Cat("하늘")};

        //3. new + 리터럴 이용
        Cat [] cats3 = new Cat[]{ new Cat("나비"),
                                  new Cat("야옹이"),
                                  new Cat("점박이"),
                                  new Cat("하늘")};        
        for(Cat c : cats3) {
            System.out.println(c.getName());
        }
    }
}
package com.test;

public class Student {

    String name;
    int age;
    String address;

    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", address=" + address + "]";
    }

    public Student() {

    }

    public Student(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    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 getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

}
package com.test;

public class TestStudent {

    public static void main(String[] args) {


        Student [] arr = { new Student("홍길동", 20, "서울"),
                        new Student("이순신", 30, "제주"),
                        new Student("강감찬", 40, "경기")};
        //1. 일반 for문
        for(int i =0; i < arr.length;i++) {
            System.out.println(arr[i]);
        }

        //2.for-each
        for(Student s : arr) {
            System.out.println(s);
        }

        //3. 이름이 "홍길동"인 학생의 주소 출력 with for
        for(int i =0; i<arr.length;i++) {
            if(arr[i].getName().equals("홍길동")) {
                System.out.println(arr[i].getName());
                System.out.println(arr[i].getAddress());
            }
        }

        //4. 이름이 "홍길동"인 학생으 주소 출력 with for-each
        for(Student s : arr) {
            if(s.getName().equals("홍길동")) {
                System.out.println(s.getAddress());
                System.out.println(s.getName());
            }
        }

        //5. 나이가 제일 많은 학생의 자료 출력
        int max =0;
        for(Student s : arr) {
            if(s.getAge() > max) {
                max = s.getAge();
            }
        }

        for (Student s : arr) {
            if(s.getAge() == max) {
                System.out.println(s);
            }
        }

        //5-1
        Student max2 = null;
        max2 = arr[0];
        for(Student s : arr){
            if(max2.getAge() < s.getAge()){
                max2 = s;
            }
        }
        System.out.println(max2);

    }

}


+ Recent posts