728x90
반응형
자료형
상수와 리터럴
- 상수
- 변하지 않는 값
- final(예약어)를 사용하여 값이 바뀌지 않도록 함
- 리터럴
- 프로그램에서 사용하는 모든 숫자, 문자, 논리값
- ex) 123, 'A', "ABCD", true, 3.14 ...
- final 키워드를 사용하여 상수로 지정
- 클래스에 붙이면 상속 불가
- 메서드에 붙이면 over-riding 불가
- final int num = 10; // 상수로 지정 num = 20; // Error 뜬다. 상수를 변경하려고 했기 때문.
final int num = 10; // 상수로 지정
num = 20; // Error 뜬다. 상수를 변경하려고 했기 때문.
참고 : java의 오버로딩과 오버라이딩 차이
1. 오버로딩 (Overloading)예시:이름은 add로 똑같지만, 입력값(숫자)의 개수가 달라서 구분 가능
2. 오버라이딩 (Overriding)예시:자식 클래스에서 부모 클래스의 인사 방법을 바꾸는 것처럼, 기존 기능을 다르게 만드는 것
요약:
- 오버로딩: 같은 이름의 메서드를 여러 개 만들되, 입력값이 달라야함
- 오버라이딩: 부모가 준 메서드를 자식이 다르게 다시 만드는 것
오버로딩(Overloading) vs 오버라이딩(Overriding) 비교구분 오버로딩 (Overloading) 오버라이딩 (Overriding)
정의 | 같은 이름의 메서드를 매개변수를 다르게 정의 | 부모 클래스의 메서드를 자식 클래스에서 재정의 |
사용 상황 | 동일한 클래스 내에서 | 상속 관계에 있는 부모-자식 클래스 간 |
매개변수 | 매개변수의 타입, 개수 또는 순서가 달라야 함 | 부모 클래스와 동일해야 함 |
리턴 타입 | 상관없음 (매개변수만 다르면 가능) | 부모 클래스와 동일해야 함 |
접근 제어자 | 상관없음 | 부모 클래스보다 넓은 범위로만 변경 가능 |
바인딩 | 컴파일 타임에 결정 (정적 바인딩) | 런타임에 결정 (동적 바인딩 |
Variable_assign
public class Variable_assign {
public static void main(String[] args) {
// 변수의 선언
int number;
// 변수를 초기화하지 않아서(아무것도 할당되지 않아서)
// 아래 출력문은 에러가 뜬다.
// System.out.println(number);
// 변수의 초기화 & 할당
int value = 1234;
System.out.println(value);
value = 5678; // 재할당
System.out.println(value);
}
}
- ctrl + n 누르면 class 바로 생성 가능
- System.out.println() 에서 출력을 할 때 사용하는 System 은 어디서나 사용 가능하다.
- 그런데 Scanner 라는 건 따로 import 해서 사용해야한다.
- 자동으로 import 하기 위해 ctrl + shift + o 를 누르면 된다.
InputTest
// java.util 이라는 패기지에서 Scanner 기능을 불러옴(import)
import java.util.Scanner;
public class InputTest {
public static void main(String[] args) {
// 입력
Scanner scan = new Scanner(System.in);
// int num = 10;
// scan라는 인스턴스(변수)를 만든다.
// ctrl 을 누른 채로 단어를 클릭하면
// 해당 내용을 볼 수 있다.
// final class Scanner 라는 걸 확인 가능
// 그래서 Scanner는 다른 곳에서 상속 불가능
// (타입 이름) (변수 이름) = 대입할 값
// Scanner scan = new Scanner(System.in);
// int num = 10;
System.out.println("byte : ");
// byte는 크기가 1byte이며 -128 부터 127까지의 정수만 가능
// RUN 하면 Scanner에 의해 값을 입력 받기 위해 대기 중이다.
// byte가 허용 가능한 범위 안의 숫자를 Console 창에 입력하면
// 해당 값이 a 라는 변수에 할당된다.
// A.B : 마침표는 "~가 가지고 있는" 이라는 의미
// 그래서 scan.nextByte() 는 "scan이 가지고 있는 nextByte()라는 기능"
byte a = scan.nextByte();
// 변수 a를 출력하라.
System.out.println("byte 타입인 나는 "+ a + " 입니다!!!");
System.out.println("short: ");
short b = scan.nextShort();
System.out.println("short 타입인 나는 "+ b + " 입니다!!!");
System.out.println("int: ");
int c = scan.nextInt();
System.out.println("int 타입인 나는 "+ c + " 입니다!!!");
System.out.println("long: ");
long d = scan.nextLong();
System.out.println("long 타입인 나는 "+ d + " 입니다!!!");
System.out.println("float: ");
float e = scan.nextFloat();
System.out.println("float 타입인 나는 "+ e + " 입니다!!!");
System.out.println("double: ");
double f = scan.nextDouble();
System.out.println("double 타입인 나는 "+ f + " 입니다!!!");
System.out.println("String: ");
String g = scan.next();
System.out.println("Sting 타입인 나는 "+ g + " 입니다!!!");
}
}
DataType 클래스 (데이터 타입 및 형 변환)
public class DataType {
public static void main(String[] args) {
/*
[데이터 타입]
1. 기본형 데이터 타입
- 정수형
byte(1), short(2), int(4), long(8)
char(2) //정수형 & 문자형
- 실수형
float(4), double(8)
- 논리형
boolean(1) //true or false
2. 참조형 데이터 타입
- 기본형 데이터타입이 아닌 "객체"
class, enum, array, ...
*/
// 기본형 데이터 타입
byte a = 127; // byte는 -128부터 127까지의 정수만 허용
short b = 12345;
int c = 1234567890;
long d = 12345678900L; // L or l 로 타입을 표기해야함
char e = 'A';
float f = 3.14F; // F or f 로 타입을 표기해야함
double g = 3.14;
boolean h = true; // true or false
// Java가 업그레이드 되면서 var 타입으로
// 아무거나 다 넣을 수도 있음.
// 근데 안 씀
// 동적으로 데이터타입 변경
var v1 = 'B';
var v2 = 123;
// 문자열 데이터 타입
String s = "안녕하세요";
String n = null; // 선언하면 기본값으로 null을 갖게 된다.
// 문자형 타입의 정수화
char alpha = 'A';
System.out.println(alpha);
char ch1 = 'A';
System.out.println(ch1);
System.out.println((int) ch1); // 문자 타입을 정수 타입으로 형 변환
// 문자와 정수 사이의 관계는 ASCII 코드에 근간을 둔다.
// 문자 0은 48, A는 65, a는 97
// 정수형 타입의 문자화
int ch2 = 67;
System.out.println(ch2);
System.out.println((char) ch2);
}
}
형 변환 (타입 변경)
- 묵시적 형 변환(자동 형변환) : 작은 범위에서 큰 범위로 가는 것
- 이사 하는 과정을 생각
- 컴퓨터가 자동으로 형 변환을 시킴
- 명시적 형 변환(강제 형변환) : 큰 범위에서 작은 범위로 가는 것
- 데이터 손실이 발생할 수 있으므로, 손실을 감수하고 강제적으로 컴퓨터가 변환시킴.
- double이라는 큰집에서 int 라는 작은 집으로 가면서 데이터 손실 발생
- 소숫점이 가능한 double 타입(큰 범위, 큰 집)의 3.14 에서 정수형만 가능한 int 타입(작은 범위, 작은 집) 으로 변환시키면 3이 된다.
- 바꾸려는 작은 범위의 타입을 괄호 안에 넣어주면 변환이 된다.
// 명시적 형 변환
double b = 3.14;
int a = (int) b;
//데이터 손실 발생
// int <- double
// 3 <- 3.14
// 값 or 변수 앞에 변환할 자료형을 소괄호 안에 명시
Constant 클래스
- 수치로서 표현되는 값들을 리터럴이라고 한다.
public class Constant {
public static void main(String[] args) {
// 상수
// final 지정자가 붙으며 초기식을 반드시 주어야함.
// 값 변경 X
final double RATE = 3.28;
System.out.println("이자율: " + RATE);
// RATE = 10.1; // RATE는 final 처리를 한 상수이므로 값을 재할당 할 수 없다.
// System.out.println(RATE);
}
}
Radix 클래스 (기수, 진수)
public class Radix {
public static void main(String[] args) {
// radix (기수, 진수)
int a = 10;
int b = 015; // 0 으로 시작하면 8진수
int c = 0x10; // 0x, 0X 로 시작하면 16진수
int d = 0b1001; // 0b, 0B 로 시작하면 2진수
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
728x90
반응형