자바공부-1

홍성도·2024년 4월 18일
0

자바공부

목록 보기
1/2

변수

public class Test {
 public static void main(String[] args) {
 int a; //변수 선언
 a = 10;
 System.out.println(a);
 }
}

숫자 정수( integer )를 보관할 수 있는 이름이 a 라는 데이터 저장소를 만든다. 이것을 변수라 한다. 이렇게 변수를 만드는 것을 변수 선언이라 한다. 이제 변수 a 에는 숫자 정수를 보관할 수 있다. 숫자 정수 뿐만 아니라 문자, 소수와 같이 다양한 종류 값을 저장할 수 있는 변수들이 있다.

변수 초기화

변수 선언 후 선언한 변수에 처음으로 값을 저장하는 것을 변수 초기화라고 한다

public class Test {
 public static void main(String[] args) {
 int a; //변수 선언 초기화 따로
 a = 10; 
 System.out.println(a);
 int b = 10; // 변수
 System.out.println(b);
 }
}

만약 변수를 초기화 하지 않는다면??
java: variable a might not have been initialized
다음과 같은 오류가 발생한다
왜???
컴퓨터 메모리는 여러 시스템이 사용하는 공간이라 값들이 계속 저장되는데 변수를 선언하면 메모리상의 어떤 공간을 차치하고 사용한다 그런데 그 공간에 어떤 값이 있는지 모른다 그래서 이상한 값이 출력이 될 수 있다.

리터럴

int a = 100; //정수 리터럴
double b = 10.5; //실수 리터럴
boolean c = true; //불리언 리터럴
char d = 'A'; //문자 하나 리터럴
String e = "Hello Java"; //문자열 리터럴

변수 값은 변할 수 있다 하지만 리터럴은 개발자가 입력한 고정값이다.

변수타입

  • 자주사용하는 타입
    boolean: 실수에 사용
    int: 기본적으로 정수에 사용을 하고 20억이 넘으면 long을 쓰면 된다.
    String: 문자 다룰때 하나는 여러개든 모두 string으로 사용하는게 편하다.
    double: 실수는 더블로 묻고 가!
  • 실무에서 거의 사용하지 않는 변수타입들
    byte:표현길이가 너무작다, 4바이트를 효율적으로 계산하도록 설계 -> 그냥 int 사용하는게 좋다.
    short:표현길이가 너무작다, 4바이트를 효율적으로 계산하도록 설계 -> 그냥 int 사용하는게 좋다.
    float:표현 길이와 정밀도가 낮다 -> double쓰는게 좋다
    char: 문자 하나를 표현할 일이 없다

낙타표기법

이건 내일배움교육을 들으면서 튜터님이 이야기 해주신 카멜표기법이다.
변수 이름은 소문자로 시작하는게 보통이지만 여러단어로 이루어진 변수 이름은 첫번째 단어는
소문자로 시작하고 그 이후 단어는 대문자로 시작하는 낙타표기법을 사용한다

orderDetail, myAccount

래퍼 클래스

Java의 래퍼 클래스는 객체가 기본 데이터 유형을 래핑하거나 포함하는 클래스다. 래퍼 클래스에 객체를 생성하면 필드가 포함되며 이 필드에 기본 데이터 유형을 저장할 수 있다. 즉, 기본 값을 래퍼 클래스 객체로 래핑할 수 있다.

The [래퍼클래스명] class wraps a value of the primitive type [기본형] in an object.

  • 래퍼 클래스 필요성
  1. 메서드에 전달된 arguments를 수정하기 위해서는 기본형 변수들을 참조형 변수로 변환해야한다.
    기본형 변수는 값으로 전달되기 때문이다.
  2. java.util 패키지의 클래스들은 참조형 변수만을 다루기 때문이다.
  3. CF의 자료구조인 ArrayList와 Vector는 참조형 변수만을 다루기 때문이다.
  4. 멀티쓰레딩에서 동기화를 지원하려면 참조형변수가 필요하다.
  • 기본데이터 유형 및 해당 래퍼 클래스

  • Number클래스

public abstract class Number implements java.io.Serializable {
    
    public Number() {super();}

    public abstract int intValue();

    public abstract long longValue();

    public abstract float floatValue();

    public abstract double doubleValue();

    public byte byteValue() { return (byte)intValue(); }

   
    public short shortValue() { return (short)intValue(); }

}
  • 문자열 숫자로 변환 과정(주로 자주 쓰이는 방법)
int i = new Integer("10").intValue();
int i = Integer.parseInt("10");
Integer i = Integer.valueOf("10")

래퍼 클래스는 인스턴스에 저장된 값을 변경못한다, 값을 참조하기 위해 새로운 인스턴스를 생성하고, 생성된 인스턴스의 값만을 참조할 수 있다.

오토박싱&언박싱

오토박싱: 기본 유형을 해당 래퍼 클래스의 객체로 자동 변환하는 것
Ex) int->integer, long->Long, double->Double
언박싱: 오토박싱의 반대 과정, 래퍼 클래스 객체를 다시 기본 유형으로 변환

  • 오토박싱 예시
Integer x = 400, y = 400;
    	if (x == y)
			System.out.println("Same");
		else
			System.out.println("Not Same");
	// 출력 결과: Not Same



Integer x = new Integer(40), y = new Integer(40);
		if (x == y)
    		System.out.println("Same");
		else
			System.out.println("Not Same");
	// 출력 결과: Same

위 예시는 자료를 찾아보다 보게 된 코드이다 이 부분에 대해서는 아직 이해가 되질 않아
내일 튜터님에게 물어보고 내일 TIL에 정리해볼 예정이다 그리고 알고리즘을 풀고 문제풀이 내역을 올려 보기도 할 예정이다.

그리고 지금 내가 내용을 이해를 했는지 잘 모르겠다..... 정리를 하긴 했는데 올바르게 정리를 한건지도 잘 모르겠고.... 조금 불안하지만 내일 튜터님에게 보여드리면서 수정해야겠다....
그리고 혹시 이 글을 보시게 되는 분들이 수정할 부분을 발견하셨다면 댓글로 꼭 알려주시면 감사하겠습니다..

profile
안녕하세요!!

0개의 댓글