훌이
후리스콜링개발
훌이

블로그 메뉴

  • 왈 (iOS APP)
  • Github
전체 방문자
오늘
어제
  • 전체 (171)
    • ⭐️ 개발 (140)
      • JAVA (4)
      • Web (5)
      • iOS & Swift (94)
      • iOS Concurrency (4)
      • Rx (18)
      • Git (6)
      • WWDC (1)
      • Code Refactor (3)
      • Server (1)
    • ⭐️ Computer Science (22)
      • 운영체제 (10)
      • 네트워크 (5)
      • PS (7)
    • 경제시사상식 (8)
    • 기타 등등 (0)

인기 글

최근 글

05-13 01:31

티스토리

hELLO · Designed By 정상우.
훌이
⭐️ 개발/JAVA

[JAVA] 기본문법 - 변수, 형변환, 배열

⭐️ 개발/JAVA

[JAVA] 기본문법 - 변수, 형변환, 배열

2024. 1. 15. 12:19
728x90
반응형

Java

1. 기본문법

1). 변수

  • 타입에 따라 크기가 달라
  • 타입
    • 기본형 primitive type(8개) : 미리 정해진 크기의 데이터 표현 / 변수 자체에 값 저장
      • 논리형 boolean
      • 정수형 byte, short, int(32bit, 약 20억개 저장, 부호비트 → -128~127), long
      • 실수형 float(32bit) double(64bit) → 정밀도 차이
      • 문자형 char
    • 참조형 reference type : 크기가 미리 정해질 수 없는 데이터의 표현 / 변수에는 실제 값을 참조할 수 있는 주소만 저장

변수 예제1

public class Lang_01 {
    public static void main(String[] args) {
        int i1 = Integer.MAX_VALUE;

        int i2 = i1 + 1;
        
        System.out.println(i2);
    }
}

→ **** / integer의 최댓값에 +1 하면 → 범위 넘어가서 long의 가장 첫 단계로 넘어감
→ 오류가 발생하지 않음 / 단, 오버플로우기 때문에 데이터 크기를 고려할 필요는 있음

변수 예제2

public static void main(String[] args) {
        float f1 = 2.0f;
        float f2 = 1.1f;
        float f3 = f1 - f2;
        System.out.println(f3); //0.9

        double d1 = 2.0;
        double d2 = 1.1;
        double d3 = d1 - d2;
				System.out.println(d3); //0.899999999999~
}

→ float : 실수의 연산은 부정확하다. Why? : 유효 자릿수를 이용해서 반올림 처리하기 때문

  • 실수를 정확하게 연산하려면?? → 정수로 만들어서 계산 / BigDecimal 사용

2). 형변환 Type Casting

  • 변수의 형을 다른 형으로 변환 ex). char ↔ int
  • primitive는 primitive끼리, reference는 reference끼리
    • 단, boolean은 불가능
    • 기본형과 참조형의 형 변환을 하려면? → Wrapper 클래스 사용
  • Wrapper 클래스? : 기본형을 감싸주는 클래스로 총 8개
  • 방법?
    • 형 변환 연산자(괄호) 사용
    • 명시적 형변환 : 자료 손실 발생 가능 - 큰값을 작은값에 넣을 때 ex. int→ byte
    • int i = 300; byte b = **(byte)**i;
    • 묵시적 형변환 : 자료 손실 발생 가능성X - 작은값을 큰값에 넣을 때 ex. byte → intbyte → short/char → int → long → float → double
      • float이 long보다 데이터를 표현할 범위가 더 넓기 때문에 가능 / 타입의 크기가 아니다!
      • short와 char는 둘 다 16bit인데, 왜 안될까? → char는 모든 bit를 데이터로 쓰고 있음, 서로 호환 불가능
    • byte b = 10; int i = (int)b; // 써줘도 ㄱㅊ int i2 = b; // 생략해도 ㄱㅊ double d = 100.5; int result = (int)d; // result = 100 / d = 100.5

형변환 예제1

public static void main(String[] args) {
        int i1 = Integer.MAX_VALUE;
        int i2 = i1 + 1;
        System.out.println(i2);

        long l1 = i1 + 1;
        System.out.println(l1);

        long l2 = (long) (i1 + 1); // 이미 오버플로우 일어난 걸 형변환
        System.out.println(l2);

        long l3 = (long) i1 + 1; // 자바에서 연산할 때, 큰 타입으로 연산 진행 / 알맞는 연산
        System.out.println(l3);
}

int i3 = 1000000 * 1000000 / 100000; //* 곱하기 진행시 이미 int의 범위 넘어서서 -> 깨짐
int i4 = 1000000 / 100000 * 100000; // 얘는 ㄱㅊ

형변환 예제2

public static void main(String[] args) {
        byte b1 = 10;
        byte b2 = 20;
        // TODO: 다음에서 발생하는 오류를 읽고 원인을 말한 후 수정하시오.
        byte b3 = b1 + b2; // Type mismatch: cannot convert from int to byte

        int i1 = 10;
        long l1 = 20;
        // TODO: 다음에서 발생하는 오류를 읽고 원인을 말한 후 수정하시오.
        int i2 = i1 + l1;

        // TODO: 다음에서 발생하는 오류를 읽고 원인을 말한 후 수정하시오.
         float f1 = 10.0; // float이라고 썼으니까, f를 붙여서 -> **10.0f;**
         float f2 = f1 + 20.0; 
}

Type mismatch: cannot convert from int to byte → int니까 byte에 할당할 수 없어!

  1. 최소단위가 int니까, byte에 할당할 수 없음
  2. int + long인 경우, 더 큰 데이터타입인 long에 맞춰서 long으로 바꿔서 할당
  3. 2개의 피연산자 중 큰 타입(float + double인 경우 → double에 맞춰)으로 형변환 후 연산 진행

형변환 예제2 알맞게 고친 것

byte b1 = 10;
byte b2 = 20;
int b3 = b1+b2;

int i1 = 10;
long l1 = 20;
long i2 = i1+l1;

float f1 = 10.0f;
double f2 = f1 + 20.0;

| / || 차이점

  • | 앞 연산이 true여도, 뒤 연산 꼭 한다
  • || 앞 연산이 true면, 뒤 연산은 하지 않고 그냥 → true

조건문에 들어갈 수 있는 표현식?

  • if문 - boolean, Boolean(wrapper)
  • switch문 - byte, short, char, int(+wrapper class / long 불가 - int 이하의 것만 가능), String, int

3). 반복문

2. 배열, 다차원 배열

1). 배열

  • 동일한 타입의 데이터 0개 이상을 하나의 연속된 메모리 공간에서 관리하는 것
  • int [] intArray; String [] nameArray; new int [3]; // int타입의 배열인데, 3개를 저장할 수 있음 newIntArray = new int[3]; // newIntArray에 할당
  • 배열 요소의 초기화?
    • 생성과 동시에 저장 대상 자료형에 대한 기본값으로 default 초기화
    • 참조형 변수는 기본값이 null - 아무것도 참조하지 않으니까.
      • char - ‘\u0000’
      • boolean - false
    • 생성과 동시에 초기화할 때 → 생략 가능
    • 선언과 생성 따로할 경우 → new int[] 생략 불가능
  • 배열 선언 → 배열 생성 → 참조값 할당 → 요소에 값 할당
    • 참조형 변수에 배열의 주소를 할당~
    • newIntArray[0] = 1;
  • 메모리에 연속된 공간을 차지하기 때문에 → 크기 변경 불가
  • int [] nums = {1,2,3}; nums = new int[] {1,2,3,4}; // 1) 설명 nums[1] = 100; // 2- 개별 요소는 다른값으로 변경 가능
  • 배열은 최초 메모리 할당 이후, 변경 불가능 = immutable
  • 배열 길이 조회는? → newIntArray.length
  • 배열 출력은? → Arrays.toString()

배열 예제1

String org = "SSAFY";
char [] chars = new char[org.length()];

org.charAt(2) // org 문자열의 2번째 인덱스 값을 가져옴 -? 'A'

chars = org.toCharArray(); // char형을 char타입 배열로 변환
// chars[0] = 'S' / chars[1] = 'S' / chars[2] = 'A' ....
for (int i=0; i<chars.length; i++) {
		System.out.print(chars[i]);
}

배열 예제2

int intArray[] = {1,2,3,4,5};
for (int x: intArray) {
		System.out.println(x);
}

2). 다차원 배열 - 2차원 배열~

int [][] intArray;
int intArray [][];
int [] intArray [];

intArray = new int[4][3];
intArray[0][3] = 3;

int[] intArray = {{0,1,2}, {3,4,5}, {6,7,8}, {9,10,11}}
728x90
반응형
저작자표시 비영리 변경금지

'⭐️ 개발 > JAVA' 카테고리의 다른 글

[JAVA] Maven, pom.xml  (0) 2024.01.13
[JAVA/WEB] 웹 구동 원리  (0) 2024.01.13
[개발] JAVA 기초  (0) 2024.01.10
  • 1). 변수
  • 변수 예제1
  • 변수 예제2
  • 2). 형변환 Type Casting
  • 형변환 예제1
  • 형변환 예제2
  • 형변환 예제2 알맞게 고친 것
  • | / || 차이점
  • 조건문에 들어갈 수 있는 표현식?
  • 3). 반복문
  • 1). 배열
  • 배열 예제1
  • 배열 예제2
  • 2). 다차원 배열 - 2차원 배열~
'⭐️ 개발/JAVA' 카테고리의 다른 글
  • [JAVA] Maven, pom.xml
  • [JAVA/WEB] 웹 구동 원리
  • [개발] JAVA 기초
훌이
훌이

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.