문자열과 형변환
1. String 클래스
1) 문자열을 표현하고 처리하기 위한 참조 자료형
- 문자열은 String 클래스의 객체
2) 문자열 리터럴을 표현할 때 이중따옴표를 사용함
ex1. String s1 = "Java";
ex2. String s2 = new String("Java");.
3) String형의 변수는 기본형 변수처럼 사용할 수 있음
4) null 이라는 특별한 리터럴이 있음
- 참조형 변수의 값(not available)이 될 수 있음
ex. if (str != null) { ... }
2. 문자열의 +연산
1) 두 문자열을 연결하는 것(concatenation)
- (문자열+기본형) or (문자열+다른 참조형)도 가능
- 기본형과 참조형 값은 문자열로 형변환 가능
2) print()나 println()에서 자주 사용됨
System.out.println("result=" + " " + result);
System.out.println('A' + 0);
System.out.println("A" + 0);
ex.문자열 덧셈 연산
public class Test {
public static void main(String args[]) {
String firstName = "Gildong"; // String 변수는 참조형이지만 기본형처럼 쓸 수 있음
String lastName = "Hong";
System.out.println(firstName + lastName);
System.out.println(firstName.concat(lastName));
}
}
GildongHong GildongHong |
3. 자료형의 변환
1) 묵시적 형변환
- 작은 타입에서 큰 타입의 값으로는 자동 형변환 가능
- 데이터의 손실 없음
- byte > short > int > long > float > double
- 개발자 > 직원 > 인간 > 포유류
- 연산을 수행하거나 메소드에 인자가 전달될 때 자료형 검사가 일어남
- 자료형이 일치하지 않으면 묵시적 형변환 필요
2) 자동 형변환의 예
- 대입문: double d=5; // 5는 5.0으로 자동으로 형변환
- 수식: System.out.println("j=" + 10); // 10은 문자열 "10"으로 자동 형변환되어 연결됨
- 함수호출: double res = Math.sqrt(2); // 함수에서 필요한 double 값으로 자동 형변환
3) 명시적 형변환
- 큰 타입에서 작은 타입의 값으로 변환할 때는 명시적 형변환이 요구됨(강제 형변환)
- 명시적 형변환을 위한 문법은 (자료형) 피연산자
4) 명시적 형변환의 예
- float f = (float)2.14;
float f;
f=2.14;
-> 컴파일 오류 발생(자료형 오류)
- int i; i = (int)3.5; // 3이 대입됨
- double d = (double)3/2;
- short s= 10; s = (short)(s-1);
변수의 사용
1. 변수의 종류
1) 지역변수
- 메소드 정의 블록{} 또는 임의 블록 안에서 선언된 변수
- 선언된 위치 이후 블록 내부에서만 사용 가능
ex. void getArea(){ double area=0; ... }
- 지역변수 <-> 전역변수
* 전역변수: 전 영역에서 사용할 수 있는 변수
** 자바에서는 전역변수는 사실상 없는 것과 같다
2) 파라미터
- 메소드 실행에 필요한 인자
ex. int max(int a, int b){ ... }
3) 데이터 필드
- 클래스 정의 블록 안에 포함된 데이터 멤버
- 자료형에 따라 0, false, null로 초기값이 자동으로 주어질 수 있음
클래스 변수(static필드) | 인스턴스 변수(non-static 필드) |
- 객체들이 공유하는 데이터 필드 - 오직 하나만 존재 - static으로 선언된 정적 필드 |
- 개별 객체가 소유하는 데이터 필드 - 객체의 상태를 표현하기 위한 데이터 - 객체가 생성될 때 만들어짐 |
class Circle {
static final double PI = 3.14; // 클래스 변수 - 상수 // 필드
private int radius; // 인스턴스 변수
public Circle(int a) { // 매서드의 특별한 생성자 // 파라미터
this.radius = a;
}
int getRadius() {
return this.radius;
}
void setRadius(int n) { // 파라미터
this.radius = r;
}
public double getArea() {
double temp; // 지역변수
temp = this.radius * this.radius * PI;
return temp;
}
}
2. 변수 선언 방법
1) 변수 선언문
[접근/비접근 제어자] 자료형 변수이름 [=초기값][, 변수이름[=초기값] ... ]; |
- 접근 제어자로 생략, private, protected, public을 사용
- 지역 변수 선언에서는 사용하지 못함
- 비접근 제어자로 static(static data를 선언하기 위해), final(상수 선언)을 사용
2) 변수 선언 예시
int option;
double sum=0, difference.product=1;
static final double PI=3.14; // 클래스 변수, 상수
Circle c = new Circle(2);
static int count; // 클래스 변수
protected String name; // 인스턴스 변수
3. 변수의 사용 범위
1) 지역 변수와 파라미터의 사용 범위
- 메소드가 실행될 때 만들어지고 끝나면 없어짐
- 선언된 곳부터 해당 블록이 종료될 때까지 유효함
- 지역 변수는 자동으로 초기값이 주어지지 않음
- 초기값을 지정한 후 사용해야 한다
2) 데이터 필드의 사용 범위
- 선언된 클래스 내부에서 사용 가능
- 클래스 외부에서의 사용 여부는 접근 제어자(access modifier)에 따라 다름
ex. class Circle {protected int radius; ...}
4. 지역 변수와 파라미터의 사용
1) 예시1
public class Exam {
static int sum() { // 파라미터
int total = 0; // 지역변수
for(int i=1; i<=max; i++)
total += i;
return total;
}
public static void main(String[] args) { // 메인함수 실행
int result; // 메인함수에서만 사용되는 지역변수
result = Exam.sum(10); // exam 클래스의 sum 메소드 실행
System.out.println(result);
}
}
2) 예시2
class Circle {
int radius; // 인스턴스 변수
static int count; // 클래스 변수 // 초기값은 0이 됨
public double getArea() {
return this.radius * this.radius * 3.14;
}
}
public class CircleTest {
public static void main(String[] args) { // 메인함수에 객체 2개를 만듦
Circle c1;
ci = new Circle();
c1.radius = 3;
Circle c2;
c2 = new Circle();
c2.radius = 5;
Circle.count = 2;
}
}
입출력
1. Scanner 클래스
1) 키보드나 파일로부터 다양한 자료를 입력받을 때 사용
- 기본적으로 공백으로 구분되는 단어 입력
- 입력 메소드에 따라 단어를 적당한 기본형 또는 문자열로 변환
2) 키보드에서 입력받을 때
- 키보드로 타이핑한 후 엔터키를 치면 입력이 이루어짐
Scanner s = new Scanner(System.in);
// 스캐너 변수 s를 선언하고
// new Scanner 객체 생성
// System.in이라는 표준 입력 스트림을 표현하는 객체를 인자로 넣음
String name = s.next();
// next(): 한 단어를 문자열로 해석해 읽어라
// s.next(): 그것을 s에 return
// String name에 그것을 넣어줌
- 엔터키를 치면 String name에 s.next()가 저장됨
3) 파일에서 입력받을 때
Scanner s = new Scanner(new File("test.txt"));
String name = s.next();
- 하나의 단어를 문자열로 해석해 입력
2. Scanner 클래스의 입력용 메소드
1) String next()
- 다음 단어를 String 값으로 반환
2) int nextInt()
- 다음 단어를 int 값으로 반환
- 형변환이 가능해야 오류가 안 생김
3) double nextDouble()
- 다음 단어를 double 값으로 반환
- 형변환이 가능해야 오류가 안 생김
4) String nextLine()
- 한 줄을 String 값으로 반환
- 한 라인을 통째로 입력받기 가능
5) 예시
public class ScannerTest {
public static void main(String[] args) {
java.util.Scanner s = new java.util.Scanner(System.in);
// import java.util.Scanner; 구문을 사용해 Scanner 클래스명만으로 사용 가능
System.out.println("정수 2개를 입력하세요.");
int i = s.nextInt();
int j = s.nextInt();
System.out.println("두 수의 합은 " + (i + j) + "입니다");
}
}
정수 2개를 입력하세요. 51 75 두 수의 합은 126입니다. |
3. 화면 출력과 형식 지정
1) 화면 출력을 위한 메소드
- System.out: 문자열 출력을 위한 표준 출력 스트림
ex.
- System.out.print()
- System.out.println()
- System.out.printf()
- System.out.format()
2) printf(String format, Object... args)
또는 format(String format, Object... args)
- 출력형식 지정
%[인자_인덱스$][+ or -][너비][.소수점이하 자리수]변환문자 |
- 변환 문자: %b(논리값), %h(16진수로 변환해 출력), %s(문자열 출력), %c(문자), %d(10진 정수), %o(8진 정수), %x(16진 정수), %f(실수), %%(%), %n(줄바꿈)
3) 예시1
import java.util.*;
public class SimplePrintf {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("나이, 몸무게, 키, 혈액형 입력:");
byte age = s.nextByte();
int weight = s.nextInt();
double height = s.nextDouble();
String blood = s.next();
System.out.printf("나이: %d, 몸무게: %d, ", age, weight);
System.out.printf("키: %f, 혈액형: %s", height, blood);
}
}
나이, 몸무게, 키, 혈액형 입력: 23 50 165.5 O 나이: 23, 몸무게: 50, 키: 165.500000, 혈액형: B |
4) 예시2
public class SimpleFormat {
public static void main(String[] args) {
System.out.println("123456 123456 123456");
System.out.println("--------------------");
System.out.println("%6o %6d %6x %n", 20, 20, 20);
System.out.println("%-6o %-6d %-6x %n", 20, 20, 20);
System.out.println("%1$6o %+6d %2$6h %n", 128, 256);
System.out.println("%1$6.2f %1$6.4f %1$8.6f %n", 3.141592);
}
}
123456 123456 123456 -------------------- 24 20 14 24 20 14 200 +128 100 3.14 3.1416 3.141592 |
* 자료형 변환: 변수에 값을 대입할 때, 수식을 계싼할 때, 메소드 호출 시 파라미터의 값을 전달할 때 자료형이 일치하지 않는 문제가 발생할 수 있다
-> 이 때 자료형의 변환 필요
* 지역 변수: 메소드 정의 블록 안에 선언된 변수
-> 메소드 실행에 필요한 값을 임시 저장하기 위한 것으로 메소드 실행이 종료되면 사라짐
* 인스턴스 변수: 클래스 정의에 포함되는 필드의 종류
-> 객체가 생성될 때 만들어져 해당 객체의 상태값을 저장하기 위해 사용
* 클래스 변수: 클래스 정의에 포함되는 필드의 종류
-> 해당 클래스의 모든 객체들이 공유하는 변수
* Scanner 클래스: 기본형 데이터와 문자열의 입력 기능을 제공하는 유틸리티 클래스
-> 공백문자로 구분되는 단어(토큰) 단위로 입력받는다
'AI > JAVA 프로그래밍 기초' 카테고리의 다른 글
JAVA 프로그래밍 기초 04 연산자, 수식, 문장 (0) | 2025.10.11 |
---|---|
JAVA 프로그래밍 기초 02 Java 기본 문법(1) (0) | 2025.10.11 |
JAVA 프로그래밍 기초 01 Java 개요 (0) | 2025.10.11 |
JAVA 프로그래밍 기초 00 자바 Oracle Java SE + JDK 설치 및 환경설정 (0) | 2025.10.11 |