Java Singleton(싱글톤)




Singleton(싱글톤)

- 프로그램에서 단 하나의 인스턴스만 만들수 있도록 보장해야 하는 경우 이 인스턴스를 싱글톤(Singleton)이라 한다.


- 클래스 외부에서 생성자를 호출할 수 없도록 제한해야 한다.





- 외부에서 생성하지 못하도록 클래스 내부에서 private 접근의 인스턴스를 생성하고, 생성자를 private로 선언한다.


- 마지막으로 생성한 private 객체를 return해주는 static 메소드를 만들어 객체를 리턴해준다.

코드1





- 생성자를 private로 선언했으므로 new로 인스턴스를 생성하려고 하면 에러가 발생한다.


- static 메소드인 getSingle을 이용하여 인스턴스를 가져올 수 있다.

코드2

결과1




- 결과1을 보면 ss와 ss2가 같은 것을 확인할 수 있으며 단 하나의 인스턴스만 생성된다.


간단히 보자면 인스턴스를 하나 생성 후 인스턴스를 생성할 수 없도록 막고 생성한 인스턴스를 가져와 사용할 뿐이다.







'JAVA > 기초' 카테고리의 다른 글

Java import  (0) 2020.03.18
Java 상수 static final  (0) 2020.03.18
Java static 정적 변수, 메소드  (0) 2020.03.17
Java 배열 기본값, 배열 복사  (0) 2020.03.16
Java 향상된 for문, label  (0) 2020.03.16

Java static 정적 멤버 변수, 메소드





static(정적) 멤버 변수, 메소드

- static은 '고정된' 의미로서 클래스에 고정된 값, 함수로서 인스턴스를 생성하지 않고도 사용할 수 있다.


- static 변수는 선언 시 초기화 하거나 static 블록 부분에서 초기화 되어야만 한다.


- static 메소드는 인스턴스를 생성하지 않고도 사용할 수 있으므로 그 클래스의 static 변수가 아닌 멤버 변수는 사용할 수 없다.


코드1

결과1



- 사용하기 위해서는 '클래스이름.변수이름' '클래스이름.메소드이름' 처럼 사용한다.



 인스턴스마다 공통된 변수나 메소드를 static으로 생성한다.






'JAVA > 기초' 카테고리의 다른 글

Java 상수 static final  (0) 2020.03.18
Java Singleton(싱글톤)  (0) 2020.03.17
Java 배열 기본값, 배열 복사  (0) 2020.03.16
Java 향상된 for문, label  (0) 2020.03.16
Java 형변환  (0) 2020.03.15

Java 배열 기본값, 배열 복사





1. 배열 타입별 기본값


- 배열을 생성한 후 default 값으로 자동으로 초기화 된다.

 종류

타입

default 값

 정수형

 byte[]

0

 short[]

0

 char[]

'\u0000'

 int[]

0

 long[]

0L

 실수형

 float[]

 0.0F

 double[]

 0.0

 논리형

 boolean[]

false

 참조형

 클래스

null






2. 배열 복사. 얕은 복사 vs. 깊은 복사


1) 얕은 복사

- 얕은 복사일 경우 기종의 항목들을 참조하는 또하나의 객체를 만들 뿐이다.



- 코드1을 보면 new_arr = old_arr로 복사 후 new_arr[1]의 값을 바꾸었다.

- 이후 old_arr의 요소들을 확인해보면 old_arr[1]의 값이 바뀐 것을 확인할 수 있다.

코드1

결과1

- 따라서 얕은 복사는 같은 값들을 참조하는 다른 이름의 객체를 만든 것 뿐이다.





2) 깊은 복사

- 깊은 복사를 해주기 위해서는 크게 2가지 방법이 있다.

 > for문을 사용하여 일일이 값을 초기화 해준다.

 > System.arraycopy()를 사용한다.



- 코드2는 System.arraycopy()를 사용하였다.

System.arraycopy(복사 할 배열, 시작 index, 복사 받는 배열, 시작 index, 길이[복사할 개수])



코드2

결과2




- 깊은 복사는 얕은 복사와 달리 새로운 값을 같으므로 new_arr 요소의 값을 변경하여도 old_arr의 요소가 변하지 않는다.







'JAVA > 기초' 카테고리의 다른 글

Java Singleton(싱글톤)  (0) 2020.03.17
Java static 정적 변수, 메소드  (0) 2020.03.17
Java 향상된 for문, label  (0) 2020.03.16
Java 형변환  (0) 2020.03.15
Java 데이터 타입  (0) 2020.03.15

Java 향상된 for문, label



1. 향상된 for문

- 배열이나 컬렉션 객체를 쉽게 처리하기 위하여 사용할 수 있다.

- 기존 for문과 달리 추가적인 변수와 증감식을 사용하지 않는다.

- 반복 횟수는 배열이나 객체의 길이만큼 반복한다.


코드1


결과1




2. Label(이름)

- 중첩된 for문에서 break를 해줄 때 사용할 수 있다.

- 결과2를 보면, break를 사용하면 안쪽의 for문만 종료된다.


코드2

결과2


- 하지만 label을 지정해주고 break Out;을 해줌으로써 바깥의 for문이 종료되도록 만들 수 있다.

코드3

결과3





'JAVA > 기초' 카테고리의 다른 글

Java static 정적 변수, 메소드  (0) 2020.03.17
Java 배열 기본값, 배열 복사  (0) 2020.03.16
Java 형변환  (0) 2020.03.15
Java 데이터 타입  (0) 2020.03.15
JAVA(자바) - Stack(스택)  (0) 2019.05.16

Java 형변환





1. 자동 형변환

> 큰 크기 타입 = 작은 크기 타입; 


: 작은 크기의 타입이 큰 크기의 타입에 저장될 때 발생한다.



ㄴ 타입 크기 비교

byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)


ㄴ 연산 시에도 이러한 자동 형변환이 일어나는데, 연산을 한다면 작은 타입이 큰 타입으로 형변환되어 연산을 한다.

예를 들어 [int형 + double형]을 연산하면 작은 타입의 int형이 double형으로 형변환하여 연산되고 double형을 결과로 얻는다.


ㄴ char형은 범위가 0~65535으로 음수 저장이 불가능하다. 따라서 byte나 short형을 char형으로 자동 형변환 하려고 하면 에러가 발생한다.






2. 강제 형변환

> 작은 크기 타입 = (작은 크기 타입) 큰 크기 타입; 


: 자동 형변환와 달리 큰 크기 타입을 작은 크기 타입으로 형변환한다. 크기가 적어짐으로써 저장된 값이 손상될 수도 있으므로 사용할 때는 주의하여야 한다.






'JAVA > 기초' 카테고리의 다른 글

Java static 정적 변수, 메소드  (0) 2020.03.17
Java 배열 기본값, 배열 복사  (0) 2020.03.16
Java 향상된 for문, label  (0) 2020.03.16
Java 데이터 타입  (0) 2020.03.15
JAVA(자바) - Stack(스택)  (0) 2019.05.16

Java 데이터 타입





기본 타입

 종류

타입 

크기 

값 범위 

 정수

byte

1 byte

-2^7~ 2^7-1 [-128~127] 

short

2 byte

-2^15 ~ 2^15-1 

char

2 byte

0~ 2^16-1 [0~65535] 

int

4 byte

-2^31 ~ 2^31-1 

long

8 byte

 -2^63 ~ 2^63-1

 실수

float

4 byte

 

double

8 byte

 

 논리

boolean

1 byte

 


1. 자바는 기본적으로 정수 연산을 int 타입으로 수행하므로 

[byte형 변수 + byte형 변수]의 결과를 byte형 변수에 저장하려고 하면 에러가 발생한다.


2. char형 변수를 초기화 할 때, char c = '' 식으로 빈 문자로 초기화 한다면 에러가 발생한다.






타입 별 범위 값

타입 

최소값 상수

최대값 상수

byte

Byte.MIN_VALUE

Byte.MAX_VALUE

short

Short.MIN_VALUE

Short.MAX_VALUE

int

Integer.MIN_VALUE

Integer.MAX_VALUE

long

Long.MIN_VALUE

 Long.MAX_VALUE

float

Float.MIN_VALUE

Float.MAX_VALUE

double

Double.MIN_VALUE

 Double.MAX_VALUE









'JAVA > 기초' 카테고리의 다른 글

Java static 정적 변수, 메소드  (0) 2020.03.17
Java 배열 기본값, 배열 복사  (0) 2020.03.16
Java 향상된 for문, label  (0) 2020.03.16
Java 형변환  (0) 2020.03.15
JAVA(자바) - Stack(스택)  (0) 2019.05.16

스택 

데이터를 저장하기 위해 사용하는 자료구조 중 하나이다.

데이터의 입출력 순서는 후입선출[=선입후출](Last In First Out, 나중에 입력 된 것이 가장 먼저 출력된다.) 이다.

 

 


package mycode

public class MyStack {

	int size;
	int point;
	E[] stac;	// 제네릭 클래스로 스택 생성

	public MyStack(int size) {
	point = 0;
	this.size = size;
	try {
		stac= new E[max]	// 
	}

	}


	public void push(E x) {
		if( point >= size)
			System.out.println("스택이 가득 찼습니다.");
		else
			stac[point++] = x;

	}

	public void pop() {
		if( point <= 0)
			System.out.println("스택이 비어있습니다.");
		else 
			stac[point--];
	}


	public E indexOf(E x) {
		for(int i = point -1; i>=0; i--) {
			if( stac[i] == x)
				return i;
		}
		return -1;
	}

	public void stack_view() {
		if( point <= 0)
			System.out.println("스택이 비어있습니다.");
		else {
			for(int i=0; i< point; i++)
				System.out.print(stac[i] + " ");
			System.out.println();
		}

	}

	public static void main(String[] args) {
		MyStack s;
		
		s.push(40);
		s.push(8);
		s.push(12);
		s.push(7);
		s.pop();
		s.push(27);

		System.out.println("스택에서 12 인덱스(-1이면 없음) : "+indexOf(12));

		s.stack_view();
	}
}

 

- 스택의 데이터를 넣기 위해서 push(E x)를 사용한다.

- 스택에서 데이터를 빼기 위해서 pop()을 사용한다.

- 스택에서 해당하는 데이터의 있는 인덱스를 알기 위하여 indexOf(E x)를 사용한다.

- 스택의 어떤 데이터가 들어가 있는지 보기 위하여 스택의 데이터들을 출력하기 위해 stack_view()를 사용한다.

 

- 제네릭 클래스로 생성하였으므로 클래스 변수를 생성할 시 스택의 자료형을 지정할 수 있다. 

 

'JAVA > 기초' 카테고리의 다른 글

Java static 정적 변수, 메소드  (0) 2020.03.17
Java 배열 기본값, 배열 복사  (0) 2020.03.16
Java 향상된 for문, label  (0) 2020.03.16
Java 형변환  (0) 2020.03.15
Java 데이터 타입  (0) 2020.03.15

+ Recent posts