- 변수
- 메모리 공간(RAM)에 한 개의 값을 기록하기 위한 장소(공간)
- 변수의 자료형
- 기본형
- 실제 데이터(값)을 저장
- 논리형, 문자형, 정수형, 실수형으로 나눠지고 8개의 자료형이 있음
- 각 자료형 별 데이터 저장크기가 다름
- 참조형
- 데이터가 저장되어 있는 주소를 저장(객체의 주소)
- 기본형을 제외한 나머지(String 등), 사용자 정의 자료형
- 4byte의 공간을 저장공간으로 할당
- 기본형
- 자료형
- 논리 boolean 1byte
- 문자 문자 char 2byte ' '
- 문자 문자열 string 참조형 " "
- 숫자 정수형 byte 1byte short 2byte int(기본) 4byte long 8byte
- 숫자 실수형 float 4byte double(기본) 8byte (유니코드 : 문자를 숫자로 표현)
- 변수의 선언
- 메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것
- 자료형 : 변수 타입 지정
- 변수명 : 변수명 지정
* 변수 선언 실습
package com.test01;
public class Variable01 {
public static void main(String args[]) {
//준비
//클래스명 변수명 = new 클래스명();
//실행
//변수명.메소드명();
Variable01 test = new Variable01();
test.declareVariable();
test.initVariable();
}
//타입 변수명 = 값 !
//타입 - 생성할 변수에 어떤 종류의 값이 들어갈지 타입 지정
//변수명 - 변수의 이름
// 값 - 변수에 저장할 데이터
public void declareVariable() {
//변수의 선언
//숫자형
//정수형
byte bnum;
short snum;
int inum;
long lnum;
//실수형
float fnum;
double dnum;
//논리형
boolean isTrue;
//문자형
char ch;
//문자열(참조형)
String str;
//------------
//대입
bnum = 1;
snum = 2;
inum = 4;
lnum = 8L;
fnum = 4.0F;
dnum = 8.0;
isTrue = true;
ch = 'A';
str = "A";
//변수에 저장된 값 출력
System.out.println(inum);
System.out.println(dnum);
System.out.println(isTrue);
System.out.println(ch);
}
public void initVariable() {
//변수 선언과 동시에 초기화
int inum = 4;
double dnum = 8.0;
boolean isTrue = false;
String str = "Hello World";
//변수 값 출력하기
System.out.println(inum);
System.out.println(dnum);
System.out.println(isTrue);
System.out.println(str);
}
}
- 변수의 명명 규칙
- 대소문자 구분, 길이 제한 없음
- 예약어 없음
- 숫자로 시작하면 안된다
- 특수문자는 '_'와 '$'만을 허용
- 여러 단어 이름은 단어의 첫 글자를 대문자로(camel 표기법 e.g. useName)
- 변수의 초기화
- 변수를 사용하기 전에 처음으로 값을 저장하는 것 -> 지역변수는 반드시 초기화 필요 (전체에서 쓸 수 있는 것 전역변수)
- 변수는 메서드 안에서만 쓸 수 있다. -> 특정 지역 안에서만 쓸 수 있다->지역변수
- 값 대입
- 리터럴 : 변수에 대입되는 값 자체를 의미
- 상수
- 한번 값을 저장하면 변경 불가능
- final
- 상수 선언 시 대문자
- 문자열
- 다른 자료형 + "문자열" -> 문자열
- 데이터 오버플로우
- e.g. byte형
- 127+1을 하면 범위를 초과한 128이 되고 허용된 범위 이상의 비트를 침범하게 되는데 이를 오버플로우라고 한다.
- byte형 허용범위 최소값인 -128이 되는 것이다.
- e.g. byte형
*상수와 오버플로우 실습
package com.test01;
public class Variable03 {
public static void main(String args[]) {
//상수 테스트
int age;
final int AGE;
age = 19;
AGE = 19;
System.out.println("age: " + age);
System.out.println("AGE: " + AGE);
age = 20;
//AGE = 20;
//에러 발생, 상수 변경 불가
//오버플로우 (순환이 된다)
//byte bnum = 128;
//에러 발생, 범위 벗어난 값
byte bnum = 127;
bnum = (byte)(bnum + 1);
System.out.println("bnum: " + bnum);
}
}
- 형변환 (casting)
- 컴퓨터의 값 처리 원칙(같은 종류 자료형만 대입, 계산 가능)이 지켜지지 않은 경우에 형 변환이 필요함
- 자동 형변환 : 연산 시 컴파일러가 자동으로 형이 변환하는 것을 의미 byte -> short char -> int -> long -> float -> double *byte와 short 연산 시 자동으로 결과값을 int형으로 반환
- 강제 형변환(명시적 형변환) : 자료형으로 형변환을 해줄 수 있다. 데이터가 큰 자료형에서 작은 자료형으로 변경 시 데이터 손실이 있을 수 있어 유의해야 한다.
* 형변환 실습
package com.test01;
//형변환
public class Variable04 {
//프로그램의 시작점
public static void main(String[] args) {
//1.준비
//클래스명 변수명 = new 클래스명();
Variable04 test = new Variable04();
//2.실행
//변수명.메소드명();
test.test1();
test.test2();
}
public void test1() {
int num = 'A';
System.out.println(num);
char ch = 97;
System.out.println(ch);
//음수값 저장 불가능
//ch = -97;
//int 자료형 변수의 값은 강제 형변환 해야한다.
char ch2 = (char)num;
System.out.println(ch2);
int no = -97;
char ch3 = (char)no;
System.out.println(ch3);
}
public void test2() {
int inum = 10;
long lnum = 100;
//두 변수 연산 후 isum에 담으려면 에러 발생
//int isum = inum + lnum;
//1.
int isum = (int)(inum + lnum);
System.out.println(isum);
//2.
int isum2 = inum + (int)lnum;
System.out.println(isum2);
//3.
long lsum = inum + lunm;
System.out.println(lsum);
}
}
- 변수와 메모리 구조
- escape 문자
- 출력 메소드
- System.out.print() / System.out.println() -> 줄바꿈
- System.out.printf("%형식", 변수 등)
- %d : 정수형, %o : 8진수, %x : 16진수
%c : 문자, %s : 문자열
%f : 실수(소수점 아래 6자리), %e : 지수형태표현, %g : 대입 값 그대로
%A : 16진수 실수
%b : 논리형
정렬방법
- %5d : 5칸을 확보하고 오른쪽 정렬
- %-5d : 5칸을 확보하고 왼쪽 정렬
- %.2f : 소수점 아래 2자리까지만 표시
- %d : 정수형, %o : 8진수, %x : 16진수
- Scanner
- 정수 : sc.nextInt();
- 실수 : sc.nextFloat(); 또는 sc.nextDouble();
- 문자열 : sc.next(); 또는 sc.nextLine();
* 입출력 실습
package com.test01;
import java.util.Scanner;
public class Variable02 {
//메인메서드 있어야 동작을 함
public static void main(String args[]) {
//준비 : 클래스명 변수명 = new 클래스명();
Variable02 test = new Variable02();
//실행 : 변수명.메소드명();
test.inputTest();
}
public void inputTest() {
Scanner sc = new Scanner(System.in);
System.out.print("이름 입력 : ");
String name = sc.nextLine(); //next(), nextLine()
System.out.print("나이 입력 : ");
int age = sc.nextInt();
System.out.print("키 입력(소수점 첫째 자리까지) : ");
double height = sc.nextDouble();
System.out.println(name + "님은 " + age + "세이고, 키는 " +height + "cm입니다.");
String str = "기차" + 123 + 45 + "출발";
String str2 = 123 + 45 + "기차" + "출발";
System.out.println(str);
System.out.println(str2);
}
}
- 메소드 불러오기
- e.g.
- Operator05 o = new Operator05();
- o.test01();
- o.test02();
- new Operator05().test01();
- new Operator05().test02();
- e.g.
- 메소드 종류
- 클래스 메소드
- 정적 메소드이므로 static을 붙여서 선언된 메소드
- 변수나 메소드 앞에 static이 붙는다면 이 메소드는 어디서든 부를 수 있음
- 정적 메소드이므로 static을 붙여서 선언된 메소드
- 인스턴스 메소드
- 비정적 메소드이므로 non-static 메소드로 선언된 메소드
- 클래스 메소드
- 접근제한자 종류
- public : 어디서나 실행 가능
- protected : 상속 시 상속된 곳, 상속이 아닌 경우 같은 패키지 내에서 실행 가능
- default : 같은 패키지 내에서 실행 가능
- private : 현재 클래스 내에서 실행 가능
* 접근제한자 실습
package com.test01;
public class MethodTest01 {
public static void main(String[] args) {
MethodTest01.publicMethod();
MethodTest01.protectedMethod();
defaultMethod();
privateMethod();
}
//접근제한자 : public protected default private
//어디서나 접근(실행) 가능 (+)
public static void publicMethod() {
System.out.println("public method");
}
//상속 시 상속된 곳에서
//상속이 아닌 경우 같은 패키지 내에서 (#)
protected static void protectedMethod() {
System.out.println("protected method");
}
//같은 패키지 내에서 (default)
static void defaultMethod() {
System.out.println("default method");
}
//현재 클래스 내에서 (-)
private static void privateMethod() {
System.out.println("default method");
}
}
'JAVA' 카테고리의 다른 글
[JAVA 실습 #3] 4. 제어문_조건문 (0) | 2023.02.23 |
---|---|
[JAVA #3, #4] 4. 제어문 (0) | 2023.02.23 |
[JAVA 실습 #2] 3. 연산자 (0) | 2023.02.21 |
[JAVA #2] 3. 연산자(Operator) (0) | 2023.02.21 |
[멀티캠퍼스 웹 서비스 개발자 취업캠프(JAVA) 합격 후기] 1. 프로그래밍 기초 (1) | 2023.02.21 |