기본 데이터 타입

자바의 기본 데이터 타입은 8가지가 있다.

데이터 타입 데이터 타입 크기
논리 타입 boolean 1byte(8 bit) boolean isPassed = true;
문자 타입 char 2byte(16 bit) char grade ='A';
정수 타입 byte 1byte(8 bit) byte year = 3;
short 2byte(16 bit) short javaScore = 17;
int 4byte(32bit) int sumScore = 120045;
long 8byte(64bit) long currentTime = 123456789L;
실수 타입 float 4byte(32bit) floag javaAvg = 78.25F;
double 8byte(64bit) double examAvg = 76.234522;

 

얼핏 보면 데이터의 종류도 많고 복잡해 보이지만 정수 타입은 int와 loing만 사용하고, 실수 타입은 double만 사용하기 때문에 실제로 그렇게 복잡하지 않다.

 

논리 타입

논리 타입은 booean이라고 쓰고 '불리언' 이라고 읽는다. 논리 타입은 기본 타입 중 유일하게 1byte 메모리 공간만 사용한다. 중요한 것은 논리 타입의 변수가 1 이나 0이 아닌, 참 또는 거짓이라는 의미의 true나 false형태의 값을 가진다는 것이다. 참고로 논리 타입의 변수 이름은 'is'로 시작하는 것이 일반적이다.

 

boolean isPassed = true;
boolean isPassed = TRUE; // 에러
boolean isPassed = False; // 에러

 

문자 타입

문자 타입은 'char'라고 쓰고 '캐랙터'라고 읽는다. 문자 타입은 2byte의 메모리 공간을 사용하는 데이터 타입이며, 한 글자만을 값으로 가지는 변수를 선언할 때 사용한다. 

자바에서 하나의 문자는 작은따옴표(')로 감싸서 표현한다. 다음은 한 글자를 저장하는 문자 타입의 변수를 선언하고 초기화하는 문구이다.

char grade = 'A';

문자 타입과 많이 혼동하는 것이 문자열 (String)인데, 문자열은 말 그대로 여러 개의 문자가 이어 붙어서 열거된 형태의 데이터를 의미한다. 문자열은 작은따옴표가 아닌 큰따옴표(")를 사용하며, 한 글자만 표현하는 문자(char) 타입과 전혀 다른 데이터 타입이다.

따라서 다음의 두 변수는 똑같이 A라는 한 글자를 할당했지만 전혀 다른 타이브이 변수로 처리된다.

char grade = 'A'; // 문자 타입
String classNumber = "A"; // 문자열 타입

다음 코드는 문자 타입의 변수에 전혀 다른 종류의 타입인 문자열을 할당하려고 했기 때문에 에러가 발생한다.

char grade = "B";

 

변수와 예약어

자바에서 예약어는 특별한 목적을 위해 미리 정의해 놓은 단어를 의미한다. JVM은 소스 코드를 처리하는 과정에서 예약어를 만나면 예약어에 해당하는 약속된 기능을 수행한다. 예를 들어 정수 타입의 데이터를 의미하는 int라는 예약어를 만나면 JVM은 정수를 저장하기 위해 32bit 메모리 공간을 확보하는 식이다. 그렇기 때문에 변수 이름으로 예약어를 사용할 수 없는 것이다.

 

 

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 이름이 있는 break  (0) 2023.10.18
[JAVA] 데이터 타입 변환  (0) 2023.10.18
[JAVA] 연산자  (1) 2023.10.17
[JAVA] 자바 변수  (0) 2023.10.17
[JAVA] 자바 클래스의 기본 구조  (0) 2023.10.17

변수

프로그램 언어에서 변수(variable)는 가장 기본이면서 중요한 문법이다. 변수가 중요한 이유는 프로그램에서 사용하는 데이터가 바로 이 변수에 저장되고 관리되기 때문이다.

 

리터럴과 변수

리터럴(literal)은 '문자로 표현된 데이터'를 의미한다. 리터럴 데이터는 데이터 자체만으로 다른 사람과 소통하는 데 한계가 있다. 이는 리터럴 자체로는 데이터가 가진 의미를 명확하게 전달할 수 없기 때문이다. 리터럴로 작성된 데이터의 의미를 명확하게 전달하기 위해서는 다른 무언가가 필요하다. 그게 바로 변수이다.

 

프로그램에 사용되는 데이터를 좀 더 쉽게 기억하고 데이터의 의미를 명확하게 전달하기 위해서 사용하는 것이 변수이다.

참고로 변수와 비교되는 개념이 상수인데, 변수가 다른 데이터로 값을 변경할 수 있다면 상수는 한번 값을 가진 이후에는 다른 값으로 변경할 수 없는 특수한 변수를 의미한다.

 

변수의 선언과 규칙

변수를 선언할 때는 변수에 저장되는 데이터의 크기를 고려하여 변수 이름 앞에 데이터 타입을 지정해야 한다. 그리고 반드시 문장 종결에 해단하는 세미콜론(;)으로 마무리 한다.

// 데이터 타입 변수이름;
String stringData;

 

변수 이름을 지정할 때는 일정한 규칙을 지켜야 하는데, 이를 네이밍 규칙(naming rule)이라고 한다. 자바의 네이밍 규칙은 다음과 같다.

 

- 반드시 숫자가 아닌 문자로 시작해야 한다.(한글도 가능)

- 공백을 포함할 수 없다.

- 특수 기호는 '$'와 '_'만 허용한다.

- 대/소문자를 구분한다.

- 자바에서 미리 지정한 예약어는 사용할 수 없다.

- 소문자로 시작하고 새로운 단어가 결합되면 첫 글자를 대문자로 변경한다.

 

추가로 변수 이름의 길이는 제약이 없다. 그러나 의미 전달이 가능한 범위 내에서 작명하는 것이 좋으며, 너무 축약된 이름은 가독성을 떨어뜨리기 때문에 사용하지 않는다. 

 

변수와 데이터 타입

변수를 선언할 때 변수의 이름 못지 않게 중요한 것이 바로 데이터 타입이다. 변수가 데이터를 저장하는 그릇이라면, 데이터 타입은 그릇의 용도와 크기를 규정하는 것이라고 생각할 수 있다. 

 

자바는 크게 기본 타입과 참조 타입, 두 가지 형태의 데이터 타입을 지원한다. 기본 타입 데이터는 논리형(Boolean), 문자형(char), 정수형(byte, short, int, long), 실수형( float, double)으로 구분되는 총 8가지 타입이 있다. 기본 타입과 완전 다른 개념의 참조 타입은 다소 복잡한데, 대표적인 참조 타입의 데이터가 바로 문자열(String)과 배열(Array)이다.

 

변수 초기화

변수를 선언한 후에는 선언된 변수에 리터럴 형태의 값을 넣어야 한다. 변수에 값을 할당하기 위해서는 할당 연산자 (=) 또는 대입 연산자를 사용한다. 

int javaScore;
javaScore = 89;

 

선언된 변수에 처음으로 값을 할당하는 것을 초기화(initialize)라고 한다. 

이미 변수에 할당된 값이 있는데 다른 값을 할당하면 기존의 값은 사라지고 새로운 값으로 덮어쓰기(overwriting)된다. 

 

int javaScore = 83;
System.out.print(javaScore); // 83

javaScore = 90;
System.out.print(javaScore); // 90

 

변수를 선언할 때는 이름이 중복되지 않도록 해야 한다. 만약 프로그램에서 변수의 중복을 허용한다면 값을 할당할 때, 어떤 변수에 할당할지 혼란스럽기 때문이다. 따라서 다음에 제시된 소스는 에러가 발생한다.

int javaScore;
int javaScore; // 에러발생

 

변수를 선언만 하고 초기화를 하지 않은 상태에서 사용하려고 해도 에러가 발생한다. 반드시 선언된 변수는 변수를 사용하기 전에 쵸기화되어야 한다.

 

 

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 이름이 있는 break  (0) 2023.10.18
[JAVA] 데이터 타입 변환  (0) 2023.10.18
[JAVA] 연산자  (1) 2023.10.17
[JAVA] 데이터 타입  (1) 2023.10.17
[JAVA] 자바 클래스의 기본 구조  (0) 2023.10.17

자바 클래스의 기본 구조

자바는 일반적으로 소스 파일 하나에 클래스 하나를 작성하기 때문에 클래스와 소스 파일을 같은 것으로 이해해도 된다.

자바의 클래스는 다음과 같은 규칙을 가지고 있다.

 

- 클래스 이름과 파일 이름은 반드시 동일해야 한다. 클래스 이름이 HelloWorld면 파일 이름도 HelloWorld.java 이어야 한다.

- 테스트 목적이 아닌 이상 하나의 파일에 하나의 클래스만 작성한다.

- 클래스 이름은 대문자로 시작하고 새로운 단어가 결합될 때 첫 글자를 대문자로 처리한다. 이를 CamelCase라고 한다.

- 시작 블록 ({) 과 종료 불록 (})을 이용하여 클래스의 시작과 종료를 지정한다.

- public static void main(String[] args) 메소드가 있는 클래스만 실행할 수 있으며, 실행할 모든 코드는 main() 메소드의 블록 안에 위치해야 한다.

 

 

 

 

 

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 이름이 있는 break  (0) 2023.10.18
[JAVA] 데이터 타입 변환  (0) 2023.10.18
[JAVA] 연산자  (1) 2023.10.17
[JAVA] 데이터 타입  (1) 2023.10.17
[JAVA] 자바 변수  (0) 2023.10.17

Set Object in JS

Set은 Javascript 표준 내장 객체로, 원시값(primitive)과 객체 참조 모두 유일한 값을 저장할 수 있다.

Array와 다르게 중복된 값을 허용하지 않는다.

 

const set = new Set();

console.log(typeof set); // object
console.log(set); // Set(0){ size : 0 }

 

Set의 type은 object이며, Set의 내장 메서드는 아래와 같다.

  1. Set.prototype.add() : set에 값 추가한다.
  2. Set.prototype.clear() : set을 비워준다.
  3. Set.prototype.delet() : set에서 특정 값을 삭제한다.
  4. Set.prototype.entries() 
  5. Set.prototype.forEach()
  6. Set.prototype.has()
  7. Set.prototype.keys()
  8. Set.prototype.values()

Set.prototype.add(value) : Set 값 추가하기

const set = new Set();
set.add(1);
set.add('string');
set.add(['a','r','r','a','y']);
set.add({ "0" : "object" });

console.log(set); // Set(4) { 1, 'string', Array(5), {...} }

set에는 객체(object), 배열(array), 숫자(number), 문자열(string)등 다양한 값을 추가할 수 있다.

 

Set.prototype.clear() : Set 비워주기

const set = new Set();
set.add(1);
set.add(2);

console.log(set); // Set(2) { 1, 2 }

set.clear();
console.log(set); // Set(0) {size : 0}

 

Set.prototype.delete(value) : Set  특정 값 삭제하기

return false or true ( 삭제 성공 시 true, 삭제 실패 시 false )

const set = new Set();
set.add(1);
set.add('string');
set.add(['a','r','r','a','y']);
set.add({ "0" : "object" });

console.log(set); // Set(4) { 1, 'string', Array(5), {...} }

set.delete("string"); // true
set.delete("string"); // false

console.log(set); // Set(3) { 1, Array(5), {...} }

 

Set.prototype.entries() : Set 순회하기

entries() method는 Set 객체의 각각의 요소를 삽입순서대로 [ 값, 값 ]의 형태로 가진 배열의 새로운 iterator 객체를 반환한다.

Set 객체에는 Map 객체처럼 Key가 존재하지 않는다. 그러나 Map 객체의 API와 비슷하게 유지하기 위해, 각각의 "요소"는 "키"와 "값"자리에 같은 값을 가지게 된다. 결과적으로 entries는 [ 값, 값 ] 형태의 배열을 반환한다. 

 

const set = new Set();

set.add(1);
set.add(2);
set.add(3);

const iterator = set.entries();

console.log(iterator);
// output : SetIterator {1 => 1, 2 => 2, 3 => 3}

for(const entry of iterator ){
	console.log(entry);
}

// output 
// [1, 1]
// [2, 2]
// [3, 3]

console.log(iterator); // SetIterator {}
// output : undefined

for .. of .. 문법으로 entries() 함수로 반환된 iterator를 순회하면서 console.log()로 찍어본 결과 [ 값, 값 ] 의 형태로 set에 추가했던 1, 2, 3이 순서대로 나오는 것을 확인할 수 있다. 

이후 iterator를 다시 console.log()로 확인해보면 해당 iterator가 비어있는 것을 확인할 수 있다.

이것은 iteration protocols 를 확인해보면 더 자세히 알 수 있다.

쉽게 생각하면 iterator는 한번 가리켰던 value는 다음 value를 가리키게 되는 순간 다시 바라볼 수 없다. 즉 한번 순회하면 다시 반복할 수 없는 것이다.

 

 iterator에 우리가 set에 값을 넣은 순서대로 [1,1], [2,2], [3,3]이 들어있다. 처음에 iterator는 [1,1]을 가리키고있다. 다음에 [2,2]를 가리키게 되면 iterator에서 [1,1]은 사라지고 [2,2], [3,3]만 남아있다. 

아래 코드를 통해서 확인할 수 있다.

const set = new Set();
set.add(1);
set.add(2);
set.add(3);

for(const entry of iterator){
    console.log(entry);
    console.log(iterator);
}

// output
// [1,1]
// SetIterator {2 => 2, 3 => 3}

// [2,2]
// SetIterator {3 => 3}

// [3,3]
// SetIterator {}

 

Set.prototype.forEach(callbackFunction) : Set 반복하기

set의 forEach method는 Array의 forEach method와 동일하다.

set의 value들을 순차적으로 한번씩 순회한다. forEach대신 위에서 사용했던 for..of를 사용해서도 set을 반복할 수 있다.

const set = new Set();

set.add(1);
set.add(2);
set.add(3);

set.forEach((s)=>{
	console.log(s);
});

// output : 
// 1
// 2
// 3

for(const entry of set){
    console.log(entry);
}

// output : 
// 1
// 2
// 3

 

Set.prototype.has(value) : Set에 특정 value 존재 여부 확인하기

Set 객체에 특정 value가 존재하는지 확인하기 위한 함수이다. 특정 value가 존재한다면 true, 존재하지 않는다면 false를 반환한다.

const set = new Set();
set.add(1);
set.add(2);
set.add(3);

console.log(set.has(1)); // true
console.log(set.has(4)); // false

 

Set.prototype.values() : Set의 value iterator 반환한다. 

Set 객체의 value들에 대한 iterator를 반환한다.

const set = new Set();
set.add(1);
set.add(2);
set.add(3);

let valueIterator = set.values();

console.log(valueIterator); // SetIterator {1, 2, 3}

for(const entry of valueIterator){
	console.log(entry);
}

// output
// 1
// 2
// 3

valueIterator = set.values();

console.log(valueIterator.next()); // {value: 1, done: false}
console.log(valueIterator.next()); // {value: 2, done: false}
console.log(valueIterator.next()); // {value: 3, done: false}
console.log(valueIterator.next()); // {value: undefined, done: true}

next()는 iterator의 method이다. 참고

 

Set.prototype.keys() : Set의 key iterator 반환한다. 

❗️Set object에서는 keys() 메서드와 values() 메서드는 동일한 기능을 한다. 왜냐하면 Set 객체의 경우 value 값을 키값으로 사용하기 때문에 [ key, value ] 쌍의 값으 [ value, value]와 동일하기 때문이다.

const set = new Set();
set.add(1);
set.add(2);
set.add(3);

console.log(set.keys());
// output : SetIterator {1, 2, 3, 'string'}
728x90

+ Recent posts