국비 18일차 JAVA 초기화블록, 싱글톤, final, vargars
2021. 1. 28. 23:15
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);
}
}
'ETC > 국비교육' 카테고리의 다른 글
국비 20일차 다형성, 추상함수, 인터페이스 (0) | 2021.02.01 |
---|---|
국비 19일차 상속, 오버라이드 (0) | 2021.01.29 |
국비 17일차 static (0) | 2021.01.27 |
국비 16일차 JAVA(생성자, 객체 생성, 오버로딩, this, getter/setter) (0) | 2021.01.26 |
국비 15일차 JAVA 배열, 클래스 (0) | 2021.01.25 |