Java 변수와 자료형 1

LIM JAEHO·2022년 6월 29일
0

Java 학습

목록 보기
4/19

Java 변수

변수란 데이터를 저장하는 메모리 공간에 붙여준 이름이다.

변수의 선언

메모리 공간에 이름을 붙여주는 행위를 변수의 선언이라고 한다.
Type varibale = value; 형식으로 변수를 선언하고 동시에 값을 할당할 수 있다.

int intNum = 10;
char character = 'a';
String str = "string";

식별자 명명 규칙

  • 문자, 숫자, _, $ 가 사용가능하다.
  • 대소문자 구분이 가능하다.
  • 숫자로 시작할 수 없다.
  • 공백을 사용할 수 없다.
  • 예약된 키워드를 사용할 수 없다.

식별자 명명 방법

  • 카멜 표기법
    변수와 함수명을 작성할 때 사용한다.
int intName = 10;
  • 파스칼 표기법
    클래스명을 작성할 때 사용한다.
int IntName = 10;
  • 스네이크 표기법
    상수를 작성할 때, 대문자와 스네이크 표기법을 사용해 작성한다.
int INT_NAME = 10;

출력할 때 Tip

// sout : System.out.println();
// soutv : System.out.println("variable = " + variable);

자료형 Data Type

Number 숫자

숫자를 다룰 때 사용하며, 종류는 아래와 같다.
정수

  • Type
    • int
    • long
int maxValue = Integer.MAX_VALUE;				// -2147483648
int minValue = Integer.MIN_VALUE;				// 2147483647

System.out.println(maxValue + 1);				// -2147483648
System.out.println((long)maxValue + 1);			// 2147483648

실수

  • Type
    • float
    • double
float floatNum = 1.23f;
double floatNum = 1.23;

float 의 경우, 숫자에도 꼭 f 를 붙여줘야 한다.

n진수

  • Value
    • 2진수
    • 8진수
    • 16진수
int numBase2 = 0b1100;
int numBase8 = 014;
int numBase16 = 0xC;

System.out.println(numBase2);		// 12
System.out.println(numBase8);		// 12
System.out.println(numBase16);		// 12

System.out.println(Integer.toBinaryString(numBase2));		// "0b1100"
System.out.println(Integer.toOctalString(numBase8));		// "014"
System.out.println(Integer.toHexaString(numBase16));		// "0xc"

Boolean 부울

논리를 나타낼 때 사용하며, 나타낼 수 있는 값이 2가지 뿐이다.

  • Type
    • boolean
  • Value
    • true
    • false
boolean isTrue = ture;
boolean isFalse = false;

Character 문자

문자 하나만 저장할 때 사용하며, 빈문자는 저장할 수 없다.

  • Type
    • char
  • Value
    'a', 'b', '1', ...
char fKey = 'a';
System.out.println(fKey);			// 'a'
System.out.println((int)fKey);		// 97	=> ASCII code value

String 문자열

문자 여러개를 저장할 때 혹은 문장을 저장할 때 사용하며, 빈문자나 문자 하나도 저장할 수 있다.

  • Type
    • String
  • Value
    "", "a", "123", "abc", ...
  • Method
    • equals
    • indexOf
    • replace
    • substring
    • toUpperCase / toLowerCase
/* equals
 * 두 문자열의 값이 같은지 확인해준다.
*/

String str1 = "string";
String str2 = "string";
String str3 = new String("string");

System.out.println(str1.equals(str2));		// true
System.out.println(str1 == str2);			// true
System.out.println(str1.equals(str3));		// true
System.out.println(str1 == str3);			// false

위와 같은 결과가 나오는 이유가 뭘까?
equals 는 값을 비교하고, == 연산자는 메모리 공간 자체(객체)를 비교한다.
그리고 java 에서는 문자열을 리터럴로 같은 값을 저장할 경우 같은 값이 저장된 하나의 메모리 공간을 가리킨다. 하지만 new 연산자로 값을 생성할 경우 값이 같더라도 메모리 공간을 새로 할당해 값을 저장한다.
따라서, 위와 같은 결과가 나타난다.

/* indexOf
 * - argument 를 하나만 넣을 경우, 해당 값을 찾아서 index 를 반환해준다.
 * - argument 를 2개 넣을 경우, 해당 값을 원하는 위치부터 값을 찾아서 index 를 반환해준다.
*/

String str = "string string";

// 처음 나오는 인자의 index 찾기
str.indexOf('i');							// 3
str.indexOf("i");							// 3

// 원하는 지점부터 인자의 index 찾기
str.indexOf("i", str.indexOf("i") + 1);		// 10
/* replace
 * 문자열 내부의 문자들을 원하는 문자들로 대체해서 반환해준다.
*/ 

String str = "string string";
System.out.println(str.replace("string", "hey"));		// "hey hey"
System.out.println(str);								// "string string"
/* substring
 * index 의 범위를 설정해주면, 해당되는 범위의 문자열을 반환해준다.
*/
String str = "string";

System.out.println(str.substring(0, 3));		// "str"
System.out.println(str.substring(0, str.indexOf("r") + 1));		// "str"
/* toUpperCase / toLowerCase
 * 문자열을 대문자 / 소문자로 바꿔 반환해준다.
*/
String str = "string";

System.out.println(str.toUpperString());		// "STRING"
System.out.println(str);						// "string"

StringBuffer

String 을 사용하고 싶은데 값의 변화가 많을 경우, StringBuffer 를 사용하면 된다.
String 의 경우 다른 값을 할당해줄 경우, 새로운 객체를 만들어 새로운 메모리 공간에 할당한다고 했다. 따라서 메모리 사용 증가로 성능 저하가 일어날 수 있다.
하지만 StringBuffer 를 사용할 경우, 객체를 새로 만들지 않기 때문에 성능 측면에서 이점을 얻을 수 있다.

  • Type
    • StringBuffer
StringBuffer sb1 = new StringBuffer();
StringBuffer sb2 = new StringBuffer("string buffer");
sb.append(" !");

System.out.println(sb2);				// "string buffer !"
String a = "123";
String b = "456";
String backUp = a;

System.out.println(a == backUp);		// true

a += b;
System.out.println(a == backUp);		// false

0개의 댓글