enum 타입
: 열거형 자료 타입이다.
타입을 명확하게 하기 위해 사용한다.
package kr.or.ddit.study05.sec03;
public enum Day {
// 개발자로서의 약속
// 대문자를 사용하는 것이 원칙
MON, TUE, WED, THU, FRI, SAT, SUN
}
package kr.or.ddit.study05.sec03;
import java.util.Scanner;
public class DayExample {
public static void main(String[] args) {
// Scanner sc = new Scanner(System.in);
// int day = sc.nextInt();
// enum 타입에서 꺼내와서 day에 넣음
Day day = Day.MON;
if(day == Day.MON) {
System.out.println("월요일");
} else if(day == Day.TUE) {
System.out.println("화요일");
} else if(day == Day.WED) {
System.out.println("수요일");
} else if(day == Day.THU) {
System.out.println("목요일");
} else if(day == Day.FRI) {
System.out.println("금요일");
} else if(day == Day.SAT) {
System.out.println("토요일");
} else if(day == Day.SUN) {
System.out.println("일요일");
}
}
}
package kr.or.ddit.study05.sec03;
public enum DeviceType {
Mobile("안드로이드"),
WEB("스프링"),
Server("리눅스");
// 생성자
DeviceType(String name) {
this.name = name;
}
String name;
}
package kr.or.ddit.study05.sec03;
public class Developer {
public static void main(String[] args) {
DeviceType dt = DeviceType.Mobile;
// enum 타입을 사용하면 특정 타입의 데이터만 꺼내올 수 있음
System.out.println(dt.name);
}
}
package kr.or.ddit.study05.sec03;
public enum Month {
/*
* 1 ~ 12월까지 타입 만들고
* if문을 통해 무슨 월이 입력 되었는지 출력해보기.
*/
JAN("1월"), FEB("2월"), MAR("3월"), APR("4월"), MAY("5월"), JUNE("6월"),
JULY("7월"), AUG("8월"), SEP("9월"), OCT("10월"), NOV("11월"), DEC("12월");
String m;
// 생성자
Month(String m) {
this.m = m;
}
}
package kr.or.ddit.study05.sec03;
public class MonthExample {
public static void main(String[] args) {
Month m = Month.DEC;
// Month.values에는 Month에 있는 모든 값이 들어가 있음
for(Month month : Month.values() ) {
if(m == month) {
System.out.println(m.m);
}
}
}
}
패키지 선언
패키지란 클래스 작성 시 해당 클래스가 어떤 곳에 속할 것인지 결정하는 것을 이야기한다.
패키지는 아래와 같은 규칙이 존재한다.
- 숫자로 시작 불가
- _ 및 $ 제외 특수문자 사용 불가
- java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용 불가
- 모두 소문자로 작성
import
사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속된 경우 사용해야 한다.
해당 패키지 클래스 또는 인터페이스를 가져와 사용할 것임을 통지해야 한다.
접근 제한자
: 클래스와 인터페이스 및 이름을 가진 멤버의 접근을 제한한다.
- public
: 외부 클래스에서도 자유롭게 사용 가능.
- protected
: 같은 패키지 또는 자식 클래스에서만 사용 가능.
- private
: 외부에서 사용 불가. => 나 자신만.
- default
: 같은 패키지에 소속된 클래스에서만 사용 가능.
아무것도 선언하지 않았을 때가 default임
static 예시
static이란 클래스에 고정되어 있는 변수나 메소드를 이야기 한다.
메모리에 고정적으로 할당되며 객체 생성 없이 사용할 수 있다는 특징이 있다.
package kr.or.ddit.study06.sec05;
public class StaticTest {
static int a = 0;
int b = 0;
// public 메소드의 경우 static 값도 접근할 수 있음 => 모든 값 접근 가능
public void addA1() {
a++;
}
// static 메소드의 경우 static 값만 접근할 수 있음
public static void addA2() {
a++;
}
public void addB1() {
b++;
}
public static void addB2() {
// b++;
System.out.println("static 메소드에서는 인스턴스"+"멤버인 b 값을 부를 수 없다.");
}
}
package kr.or.ddit.study06.sec05;
public class StaticMain {
public static void main(String[] args) {
StaticTest s1 =new StaticTest();
s1.addA1(); // a = 1
s1.addA2(); // a = 2
s1.addB1(); // b = 1
s1.addB2(); // syso
StaticTest s2 =new StaticTest();
s2.addA1(); // a = 3
s2.addA2(); // a = 4
s2.addB1(); // b = 1
s2.addB2(); // syso
s2.addB1(); // b = 2
s2.addB2(); // syso
StaticTest s3 =new StaticTest();
s3.addA1(); // a = 5
s3.addA2(); // a = 6
System.out.println(StaticTest.a+", "+s1.b);
System.out.println(StaticTest.a+", "+s2.b);
System.out.println(StaticTest.a+", "+s3.b);
}
}
싱글톤 패턴
: 디자인 패턴 중 하나로, 객체의 인스턴스가 오직 1개만 생성되는 패턴을 이야기한다.
ex) 은행 서비스
사용 이유
메모리를 효율적으로 관리할 수 있음.
데이터 공유가 쉬움
ex)
package kr.or.ddit.study06.sec05;
public class BigLoadSingleTone {
static BigLoadSingleTone instance = null;
public BigLoadSingleTone() {
try {
// 3초 동안 멈춤
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static BigLoadSingleTone getInstance() {
if(instance == null) {
instance = new BigLoadSingleTone();
}
return instance;
}
}
package kr.or.ddit.study06.sec05;
import java.util.Date;
public class BigLoadMain {
public static void main(String[] args) {
Date d1 = new Date();
// System.out.println("1");
// BigLoadSingleTone bst1 = new BigLoadSingleTone();
// System.out.println("2");
// BigLoadSingleTone bst2 = new BigLoadSingleTone();
// System.out.println("3");
// BigLoadSingleTone bst3 = new BigLoadSingleTone();
System.out.println("1");
BigLoadSingleTone bts1 = BigLoadSingleTone.getInstance();
System.out.println("2");
BigLoadSingleTone bts2 = BigLoadSingleTone.getInstance();
System.out.println("3");
BigLoadSingleTone bts3 = BigLoadSingleTone.getInstance();
Date d2 = new Date();
System.out.println(d2.getTime() - d1.getTime());
}
}
package kr.or.ddit.study06.sec05;
public class SingleTemp {
// private : 접근을 막음
// static : 하나만 생성
// SingleTemp : 디자인 패턴 중 하나.
private static SingleTemp instance = null;
private SingleTemp() {
}
public static SingleTemp getInstance() {
if (instance == null) {
instance = new SingleTemp();
}
return instance;
}
}
package kr.or.ddit.study06.sec05;
public class SingleTon {
private static SingleTon instance = null;
int a =1;
private SingleTon() { // private는 외부에서 접근 막음 (클래스내에서만 사용가능)
System.out.println("객체가 생성됨.");
}
public int getA() {
return ++a;
}
public static SingleTon getInstance() { // public 모든 곳에 열려있음 getInstance
if(instance == null) {
instance = new SingleTon();
}
return instance;
}
}
package kr.or.ddit.study06.sec05;
public class CallSingleTon {
public static void main(String[] args) {
System.out.println("1번째호출");
SingleTon singleTon1 = SingleTon.getInstance();
System.out.println(singleTon1.getA());
System.out.println("2번째호출");
SingleTon singleTon2 = SingleTon.getInstance();
System.out.println(singleTon2.getA());
System.out.println("3번째호출");
SingleTon singleTon3 = SingleTon.getInstance();
System.out.println(singleTon3.getA());
System.out.println("4번째호출");
SingleTon singleTon4 = SingleTon.getInstance();
System.out.println(singleTon4.getA());
}
}
package kr.or.ddit.study06.sec05;
public class Bank {
private static Bank instance = null;
// Bank를 private로 설정해야 SingleTon을 사용하기 적합하다.
public Bank() {
}
public static Bank getInstance() {
if (instance == null) {
instance = new Bank();
}
return instance;
}
private int money = 10000;
public int getMoney(int m) {
if(money < m) {
System.out.println("잔고가 모자릅니다.");
return 0;
}
money -= m;
return m;
}
}
package kr.or.ddit.study06.sec05;
public class BankMain {
public static void main(String[] args) {
// 싱글톤을 적용함
Bank bank1 = Bank.getInstance();
System.out.println(bank1.getMoney(3000));
Bank bank2 = Bank.getInstance();
System.out.println(bank2.getMoney(3000));
Bank bank3 = Bank.getInstance();
System.out.println(bank3.getMoney(3000));
Bank bank4 = Bank.getInstance();
System.out.println(bank4.getMoney(3000));
// 객체가 새로 생성함 -> 잔고는 10,000인데 모두가 10,000원을 가져갈 수 있음.
// Bank bank1 = new Bank();
// System.out.println(bank1.getMoney(10000));
//
// Bank bank2 = new Bank();
// System.out.println(bank2.getMoney(10000));
//
// Bank bank3 = new Bank();
// System.out.println(bank3.getMoney(10000));
//
// Bank bank4 = new Bank();
// System.out.println(bank4.getMoney(10000));
}
}
'자바' 카테고리의 다른 글
[Java 초급] 16장 Getter, Setter, 재귀함수 (0) | 2023.12.22 |
---|---|
[Java 초급] 15.5.1장 테스트1 (0) | 2023.12.21 |
[Java 초급] 13.5.2장 테스트2 (0) | 2023.12.19 |
[Java 초급] 14장 String 메소드 종류 (2) | 2023.12.19 |
[Java 초급] 13.5.1장 테스트1 (0) | 2023.12.18 |