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

JavaScript eval 함수







- 인수로 문자열을 받으며 문자열을 자바스크립트 코드로서 해석한 후 동작한다.


		var mul = 5;
		
		eval("mul *= 10; var temp = 10");
		document.write(mul, " ", temp);	// 50 10


- 3~4라인을 보면 eval 함수 내에 선언한 변수 temp를 밖에서도 사용할 수 있다.


- 이렇게 함수로 코드를 실행 가능한 이유는 자바 스크립트가 스크립트 언어로서 컴파일러를 사용하지 않는 인터프리터 방식으로 한줄 한줄 해석하므로 코드를 해석하는 도중 코드를 해석할 수 있다.


- 문자열로 코드를 실행하므로 외부로부터 코드를 입력받아 그것을 실행 시킬 수 도 있다.


- 단, 코드를 읽는도중 또 코드를 읽는 이중 작업으로서 실행 속도가 더욱 느려지며, 보안상 문제가 발생하기 쉬워서 사용은 권장되지 않는다.





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

JavaScript Date(날짜, 시간) 구하기  (0) 2020.04.30
JavaScript var, let, const 차이  (0) 2020.04.30
JavaScript 함수  (0) 2020.03.14
JavaScript 예외 처리  (0) 2020.03.13
JavaScript 제어문  (0) 2020.03.13

JavaScript 함수






함수의 기본적인 형태 

		function sum(a,b) {
			let result = a+b;
			return result;
		}




디폴트 매개변수 (Default Parameter)

		function sum(a=5,  b=50) {
			let result = a+b;
			return result;
		}


- C++에서와 마찬가지로 디폴트 매개변수를 지정할 수 있다. 디폴트 매개변수는 함수 호출 시 파라미터가 없으면 디폴트로 지정해 놓은 값으로 함수를 실행한다.


- 디폴트 매개변수는 우측부터 지정하여야 한다.




암시적으로 생성되는 인수의 배열

		function sum2() {
			let result = 0;
			for(var i=0; i<arguments.length; i++) {
				result += arguments[i];
			}
			return result;
		}
		document.write(sum2(1,2,3,4,5,6,7,8,9,10));	// 55


- 함수는 암시적으로 arguments라는 인수들의 배열을 가진다.


- 위 sum2함수는 1~10까지의 수를 인수로 받고 이를 가지고 있는 arguments 배열을 통하여 그 합을 return 해준다.




익명 함수

		let mul = function(a,b) { return a*b; }
		
		document.write(function(a,b) {return a+b;}(5,10) );	// 15
		document.write(mul(5,10));	// 50


- 익명 함수는 간단하게 1회용 함수라 할 수 있고 이를 변수의 저장하지 않으면 위 3라인처럼 사용할 때마다 다시 구현하여야 한다.


- mul은 변수에 저장해 놓으므로 재활용 할 수 있다.


- 익명 함수와 달리 함수는 페이지가 로드할 때 모든 함수를 읽어 해석해 놓지만 익명 함수는 그렇지 않다.






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

JavaScript var, let, const 차이  (0) 2020.04.30
JavaScript eval 함수  (0) 2020.03.14
JavaScript 예외 처리  (0) 2020.03.13
JavaScript 제어문  (0) 2020.03.13
JavaScript 형변환  (0) 2020.03.12

+ Recent posts