개발자 꼬부기의 성장일기
5일차 - 변수와 타입 본문
변수와 타입
메서드
메서드란, ‘어떤 기능을 수행하기 위한 코드들을 묶어놓은 것’이며, 여기에서 ‘어떤 기능을 수행한다’는 것은 데이터를 입력받아 입력받은 데이터에 처리를 한 후, 그 결과값을 반환하는 것을 의미한다.
변수
: 값이 변할 수 있는 데이터를 임시 저장하기 위한 방
- 값을 저장할 수 있는 메모리 공간을 확보하고, 사람이 식별할 수 있는 이름을 붙인 것
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()
리터럴: 문자 그대로의 , 문자가 가리키는 값 그 자체
- float 타입의 변수에 실수형 리터럴을 할당할 때, 리터럴 뒤에 접미사 f를 붙여주어야 합니다.
- 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) 자동변환
- 바이트 크기가 작은 타입에서 큰 타입으로 변환할 때 (예 : byte → int)
- 덜 정밀한 타입에서 더 정밀한 타입으로 변환할 때 (예 : 정수 → 실수)
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) name1과 name2는 문자열 리터럴을 String 타입의 변수에 직접 할당
=> 동일한 문자열 리터럴을 두 변수에 할당하는 경우, 두 변수는 같은 문자열의 참조값을 공유
2) name3과 name4는 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"));
'언어공부 > [코드스테이츠] 백엔드부트캠프' 카테고리의 다른 글
7일차 - Java 기초(2) : 반복문 (0) | 2023.04.19 |
---|---|
6일차 - Java 기초(1) : 연산자, 입출력, 제어문 (0) | 2023.04.18 |
4일차 - git / github 맛보기 (0) | 2023.04.14 |
3일차 - 리눅스 OS 맛보기 (0) | 2023.04.13 |
2일차 - 컴퓨터 개론, 웹 이해 (0) | 2023.04.12 |