Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자 꼬부기의 성장일기

5일차 - 변수와 타입 본문

언어공부/[코드스테이츠] 백엔드부트캠프

5일차 - 변수와 타입

다죵 2023. 4. 17. 14:29

변수와 타입

메서드

메서드란, ‘어떤 기능을 수행하기 위한 코드들을 묶어놓은 것’이며, 여기에서 ‘어떤 기능을 수행한다’는 것은 데이터를 입력받아 입력받은 데이터에 처리를 한 후, 그 결과값을 반환하는 것을 의미한다. 

 

변수

: 값이 변할 수 있는 데이터를 임시 저장하기 위한 방

- 값을 저장할 수 있는 메모리 공간을 확보하고, 사람이 식별할 수 있는 이름을 붙인 것

 

1) 변수선언

변수를 선언하면 컴퓨터는 값을 저장할 메모리 공간을 확보한다.

 

2) 값 할당

변수에 값을 저장하는 것을 할당 또는 대입

 

3) 명명 규칙

- 자바에서 변수명은 일반적으로 카멜 케이스(camelCase)를 사용

- 변수명으로 영문자, 숫자, _, $를 사용할 수 있으며, 영문자는 대소문자가 구별되어 인식됨

- 숫자로 시작하는 변수명은 사용할 수 없음.

- 이미 사용 중인 예약어(reserved word)는 변수명으로 사용할 수 없음.


상수 

: 변하지 말아야 할 데이터를 임시로 저장하기 위한 수단

상수는 재할당(값부여)이 금지됨. 상수는 final이라는 키워드를 사용해 선언할 수 있다.

사용하는 이유

  • 프로그램이 실행되면서 값이 변하면 안 될 때 
  • 코드 가독성을 높이고 싶을 때 
  • 코드 유지관리를 용이하게

타입

: 어떤 값의 유형

- 타입에 따라 값이 차지하는 메모리 공간의 크기와, 값이 저장되는 방식이 결정됨

 

1) 기본타입 : 데이터의 실제 값이 저장

  • 정수 타입(byte, short, int, long), 실수 타입(float, double), 문자 타입(char), 논리 타입(boolean)
  • 변수타입 자체 
int num = 1;

2) 참조타입 : 데이터가 저장된 곳을 나타내는 주소값이 저장

  • 객체의 주소를 저장, 8개의 기본형을 제외한 나머지 타입 
  • 객체 
Object reference = new Object()

리터럴: 문자 그대로의 , 문자가 가리키는 값 그 자체

  1. float 타입의 변수에 실수형 리터럴을 할당할 때, 리터럴 뒤에 접미사 f를 붙여주어야 합니다.
  2. long 타입의 변수에 정수형 리터럴을 할당할 때, 리터럴 뒤에 접미사 L을 붙여주어야 합니다.
float number = 1.7f;
long number2 = 9460730472580L;

정수 타입

byte : 1byte  / 범위 : -128 ~ 127

short : 2byte / 범위 : -32,768 ~ 32,767

int : 4byte     / 범위 : -2,147,483,648 ~ 2,147,483,647

long : 8byte  / 범위 : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807


실수 타입

float : 4byte (7자리)

double : 8btye  (15자리)


논리 타입 

boolean : 1byte(8bit) 범위 : true/ false


문자 타입

char : 2byte 범위 : '알파벳 한글자' 또는 '숫자'  

아스키코드값을 직접 넣을 수도 있음.

char letter = 65;

타입변환

1) 자동변환

  1. 바이트 크기가 작은 타입에서 큰 타입으로 변환할 때 (예 : byte → int)
  2. 덜 정밀한 타입에서 더 정밀한 타입으로 변환할 때 (예 : 정수 → 실수)
byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)

long 보다 float형이 정밀도가 높기 때문에 float형으로 자동 변환된다.

// float이 long보다 정밀하므로, 자동으로 타입이 변환됩니다.
long  longVal  = 45L;
float floatVal = longVal;

System.out.println(floatVal); // 45.0이 출력됩니다.

2) 수동변환 : 강제 캐스팅

double doubleVal = 128.0;
int intVal = (int)doubleVal; //128 int형으로 변환됨

문자열 (String)

String 타입의 변수 선언과 할당

String : " " 사이에 있는 문자열

String StrA = "문자열";

 

String 타입 변수 선언과 할당 방법 

//문자열변수 선언하는 방법
//1. 바로할당
String strA = "문자열변수 할당";
//2. new 연산자 이용
String strB = new String("문자열변수 할당");

하지만 둘다 참조 타입의 변수이고 문자열 값이 아닌 주소를 가지고 있다.

1) name1name2는 문자열 리터럴을 String 타입의 변수에 직접 할당

=> 동일한 문자열 리터럴을 두 변수에 할당하는 경우, 두 변수는 같은 문자열의 참조값을 공유

2) name3name4는 String 클래스의 인스턴스를 생성해서 String 타입의 변수에 할당

=> String 클래스의 인스턴스를 생성하게 되면 문자열의 내용이 같아도, 별개의 인스턴스가 따로 생성됨 

 

' == ' 값과 참조값이 같아야 일치함.  값은 같지만 각각 다른 곳을 참조하고 있으므로 false로 인식됨.

'equals'는 값만 비교하기 때문에 결과는 true가 됨.


String 클래스의 메서드

 

1. charAt() 메서드 : 문자열에서 인덱스에 위치에 해당하는 한글자 반환

String str = new String("Java");
System.out.println(str.charAt(0)); // 'J'

 

2. compareTo() 메서드 : 문자열 비교

String str = new String("abcd");
System.out.println(str.compareTo("bcef"));

값이 같으면 0 / 문자열이 인수로 전달된 문자열보다 작으면 음수 / 크면 양수

 

 

3. concat() 메서드 : 문자열 합치기

String str = new String("Java");
System.out.println(str.concat("수업")); // 결과 : Java수업

 

4. indexOf() 메서드 : 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환 (없으면 -1반환)

String str = new String("Oracle Java");
System.out.println(str.indexOf('O')); // O가 첫번째 이므로 0 반환
System.out.println(str.indexOf('o')); // o가 없으므로 -1 반환

 

5. trim() 메서드 : 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거

String str = new String(" Ja va     ");
System.out.println("문자열 : " + str); // 문자열 :  Ja va     
System.out.println(str + '|');         // Ja va     |
System.out.println(str.trim() + '|');  //Ja va|

 

6. toLowerCase()와 toUpperCase() 메서드

toLowerCase(): 모든 문자를 소문자로 변환

toUpperCase(): 모든 문자를 대문자로 변환

String str = new String("Java");
System.out.println(str.toLowerCase());  //java
System.out.println(str.toUpperCase());  //JAVA

StringTokenizer

: 문자열을 우리가 지정한 구분자로 문자열을 쪼개주는 클래스

String str = "This is a StringTokenizer";
StringTokenizer tokenizer = new StringTokenizer(str);  // 아무것도 없을때는 공백 ,
//다른 문자로 자르려면 StringTokenizer tokenizer = new StringTokenizer(str,"다른문자");
System.out.println("total tokens:"+tokenizer.countTokens()); // 현재 토큰 수 : 4

while(tokenizer.hasMoreTokens()){                                     //더이상 토큰이 없을때까지
System.out.println(tokenizer.nextToken());                            //토큰으로 잘라서 반환 
}
System.out.println("total tokens:"+tokenizer.countTokens()); // 현재 토큰 수 : 0

StringBuilder

: 연속적으로 문자열을 더할때 사용.  append() 함수를 사용해서 쉽게 연결할 수 있다.

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("문자열 ").append("연결");
String str = stringBuilder.toString();
System.out.println(stringBuilder);  //문자열 연결
System.out.println(str);            //문자열 연결

 

StringBuffer

String 클래스의 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수는 없습니다. 하지만 StringBuffer 클래스의 인스턴스는 그 값을 변경할 수도 있고, 추가할 수도 있다.

 

덧셈(+) 연산자를 이용해 String 인스턴스의 문자열을 결합하면, 내용이 합쳐진 새로운 String 인스턴스를 생성. 따라서 문자열을 많이 결합할수록 공간이 낭비되고 속도도 매우 느려진다. 하지만 StringBuffer 인스턴스를 사용하면 문자열을 바로 추가할 수 있으므로, 공간의 낭비도 없고 속도도 매우 빨라진다.

 

append() 

:메서드는 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 마지막에 추가

 

capacity()

: capacity() 메서드는 StringBuffer 인스턴스의 현재 버퍼 크기를 반환

 

delete()

: delete() 메서드는 전달된 인덱스에 해당하는 부분 문자열을 해당 문자열에서 제거

System.out.println(str.delete(4, 8)); //인덱스 4에서 8까지 문자 삭제
System.out.println(str.deleteCharAt(1)); //인덱스 위치의 문자 삭제

insert()

: insert() 메서드는 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 지정된 인덱스 위치에 추가

System.out.println(str.insert(4, "Script"));