developer-ellen
인간 디버거의 로그 찍기
developer-ellen
전체 방문자
오늘
어제
  • 분류 전체보기 (217)
    • 회고록 (0)
    • 취뽀 및 커리어 여정의 Stack (2)
      • SSAFY 7기 (2)
    • 프로그래밍공부 (24)
      • c++ (0)
      • JAVA (3)
      • Spring (5)
      • design pattern (3)
      • BackDB (1)
      • Servlet&JSP (3)
      • Vue (4)
      • JPA (4)
      • Infra (1)
      • Linux (0)
    • AI (3)
      • papers (3)
      • trend (0)
    • 프로젝트진행 (0)
      • 데이터베이스 (0)
      • 서버개발 (0)
      • 인공지능 (0)
      • 하루정리 (0)
    • 포트폴리오 (0)
    • 알고리즘 (158)
      • 알고리즘문풀 (155)
      • 알고리즘공부 (3)
    • 통계공부 (15)
      • 시계열분석 (15)
      • 회귀분석 (0)
    • CS (14)
      • 컴퓨터네트워크 (4)
      • 운영체제 (8)
      • 데이터베이스 (2)
    • 주저리주저리 (0)
      • 필사 (0)
    • 취업관련정보 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • c++디자인패턴
  • 시계열분석
  • 삼성코테기출자바풀이
  • 백준파이썬풀이
  • 삼성코테구현풀이
  • Arima
  • c++ 빌더 패턴
  • 운영체제인터럽트
  • 삼성코테기출
  • MA모형
  • 통계분석
  • 카카오코테java풀이
  • AR모형
  • BOJ파이썬풀이
  • 삼성코테파이썬
  • 삼성코테자바풀이
  • SW역량테스트파이썬
  • 삼성코테자바준비
  • 카카오코테
  • SW역량테스트파이썬풀이
  • 삼성코테자바꿀팁
  • 삼성코테구현문제추천
  • 삼성코테준비
  • 통계학
  • 코테파이썬
  • ARIMA모형
  • 삼성코테파이썬풀이
  • 시계열
  • 데이터분석
  • 삼성코테파이썬준비

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
developer-ellen

인간 디버거의 로그 찍기

JAVA - 변수
프로그래밍공부/JAVA

JAVA - 변수

2021. 10. 1. 14:14

JAVA 변수

1. 변수란?

  • 변수 : 단 하나의 값을 저장할 수 있는 메모리 공간"
  • 변수 선언시, 메모리의 빈 공간에 "변수 타입"에 알맞은 크기의 저장공간이 확보되고, 앞으로 이 저장공간을 "변수 이름"을 통해 사용
  • 변수타입 : 변수에 저장될 값이 어떤 타입(type)인지를 지정하는 것이며, 저장하고자 하는 값의 종류에 맞게 타입을 선택하며 자바에는 정수형, 실수형, 문자형 등 다양한 타입이 존재
  • 변수 이름 : 변수에 붙인 이름이며 저장공간(변수)에 값을 저장하고 저장된 값을 읽어오기 위해 붙여줌

 

2. 변수의 초기화

  • 변수의 초기화란 변수를 사용하기 전에 처음으로 값을 저장하는 것
  • 변수를 사용하기 위해서 반드시 '변수의 초기화'가 되어야 하며, 메모리는 여러 프로그램이 공유하는 자원이므로 다른 프로그램에 의해 저장된 알 수 없는 값(쓰레기값, garbage value)가 남아있을 수 있기 때문
  • 변수에 값을 저장 하기 위해서는 대입 연산자 '='을 사용하여 왼쪽(변수)에 저장하라는 뜻
// 변수 선언 및 출력하는 코드

public class example1 {
    public static void main(String[] args){
        int year = 0;
        int age = 14;

        System.out.println(year);
        System.out.println(age);
    }
}

 

 

3. 변수의 명명규칙

  • 대소문자가 구분되며 길이에 제한이 없다.(ex. True와 true는 서로 다른 것으로 간주)
  • java의 예약어를 사용해서는 안 된다.(ex. true는 예약어라서 사용할 수 없지만 True는 가능)
  • 숫자를 사용해서는 안 된다. (ex. top10은 허용하지만, 7up은 허용되지 않는다.)
  • 특수문자는 '_'와 '$'만을 허용한다. (ex. '$harp'은 허용되지만, S#arp은 허용되지 않는다.)

 

4. 자바 프로그래머의 권장 규칙

  • 클래스 이름이 첫 글자는 항상 대문자로 한다.
  • 변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.
  • 여러단어로 이루어진 이름은 단어의 첫글자를 대문자로 한다. (ex. lastIndexOf, StringBuffer)
  • 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다. (ex. MAX_NUMBER)
  • 변수의 이름은 짧을수록 좋지만, 약간 길더라도 용도를 알기 쉽게 '의미있는 이름'을 하는 것이 바람직하다.

 

 

5. 변수의 타입

1) 기본형(primitive type)

- 논리형(boolean) : true와 false 중 하나의 값을 갖으며, 조건식과 논리적 계산에 사용된다.

- 문자형(char) : 문자를 저장하는데 사용되며, 변수에 하나의 문자만 저장할 수 있다.

- 정수형(byte, short, int, long) : 정수를 저장하는데 사용되며, 주로 int가 사용된다. byte는 이진 데이터를 다룰 때 사용, short는 C언  어와의 호환을 위해서 사용

- 실수형(float, double) : 실수를 저장하는데 사용되며, 주로 double이 사용된다.

 

2) 상수와 리터럴(constant & literal)

- 상수(constant)

  • 변수와 달리 한번 값을 저장하면 다른 값으로 변경할 수 없으며 변수의 타입 앞에 'final'을 붙여주기만 하면 된다.
  • 상수의 이름은 모두 대문자로 하는 것이 암묵적인 관례이며, 여러 단어로 이루어져있는 경우 '_'로 구분한다.
  • 상수는 반두시 선언과 동시에 초기화해야 하며, 그 후 부터는 상수의 값을 변경하는 것이 허용되지 않는다.
  •  ex) final int MAX_SPEED = 10; // 상수 MAX_SPEED를 선언 & 초기화
  • 상수는 리터럴에 '의미있는 이름'을 붙여서 코드의 이해와 수정을 쉽게 만든다.

- 리터럴(literal)

  • 리터럴은 그 자체로 값을 의미하는 것이며, 우리가 기존에 알고 있던 '상수'의 다른 이름일 뿐이다.
  • 변수에 타입이 있는 것처럼 리터럴에도 타입이 있으며, 변수의 타입은 저장될 '값의 타입(리터럴의 타입)'에 의해 결정된다.

 

리터럴과 접미사

// 리터럴과 접미사 코드 예시
public class example1 {
    public static void main(String[] args){
        int octNum = 010; // 8진수 10, 10진수 8
        int hexNum = 0x10; // 16진수 10, 10진수 16
        int binNum = 0b10; // 2진수 10, 10진수로 2
        
        long big = 100_000_000_000L; // long big = 100000000000L;
        long hex = 0xFFFF_FFFF_FFFF_FFFFL; // long hex = 0xFFFFFFFFFFFFFFFFL;
        
        float pi = 3.14f; // 접미사 f 대신 F 사용가능
        double rate = 1.618d; // 접미사 d 대신 D 사용가능
        
        float pi_2 = 3.14; // 에러 -> float타입변수에 double 타입 리터럴 저장불가
        double rate_2 = 1.618; // OK. 접미사 d는 생략가능
        
    }
}

 

  • 리터럴의 타입은 저장될 변수의 타입과 일치하는 것이 보통이지만, 타입이 달라도 저장범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용됨
  • 리터럴의 값이 변수의 타입의 범위를 넘어서거나, 리터럴의 타입이 변수의 타입보다 저장범위가 넓으면 컴파일 에러가 발생
int i = 'A'; // 가능 -> 문자'A'의 유니코드인 65가 변수 i에 저장
long l = 123; // 가능 -> int보다 long타입의 더 범위가 넓음
double d = 3.14f; // 가능 -> float보다 double 타입의 범위가 더 넓음

int i = 0x123456789; // 에러 -> int 타입의 범위를 넘는 값을 저장
float f = 3.14; // 에러 -> float타입보다 double 타입의 범위가 더 넓음

 

  • byte와 short타입의 리터럴은 따로 존재하지 않으므로 int 타입의 리터럴을 사용하며, 단 short타입의 변수가 저장할 수 있는 범위에 속한 것이어야 함
byte b = 65; // 가능 -> byte타입에 저장 가능한 범위의 int타입 리터럴
short s = 0x1234; // 가능 -> short 타입에 저장 가능한 범위의 int타입 리터럴

 

  • 문자 리터럴과 문자열 리터럴
char ch = 'J'; // 문자 리터럴은 작은 따옴표로 문자 하나를 감싸야함
String name = "Java"; // 문자열 리터럴에서 두 문자 이상은 큰 따옴표로 감싸야함

String str = ""; // 가능 -> 문자열 리터럴에는 빈 문자열이 허용
char ch = ''; // 에러 -> ''안에 반드시 하나의 문자가 필요
char ch = ' '; // 기능 -> 공백문자로 변수 ch 초기화 가능

 

3) 문자열(String)

  • 원래 String은 클래스이므로 아래와 같이 객체를 생성하는 연산자 new를 사용해야 하지만, 위와 같은 표현도 가능하다.
  • 문자열 + any type -> 문자열 + 문자열 -> 문자열
  • any type + 문자열 -> 문자열 + 문자열 -> 문자열
String name = new String("Ellen"); //String 객체 생성

//덧셈 연산자를 이용하여 문자열을 결합할 수 있음

String name = "Ja" + "va"; //name은 "Java"
String str = name + 8.0; // str은 "Java8.0"

 

출처

'Java의 정석' - 남궁성

이 책을 공부하면서 기록하기 위하여 작성하였습니다.

'프로그래밍공부 > JAVA' 카테고리의 다른 글

JVM의 구조와 자바의 실행  (0) 2022.07.17
JAVA 언어에 대하여  (0) 2021.09.03
    '프로그래밍공부/JAVA' 카테고리의 다른 글
    • JVM의 구조와 자바의 실행
    • JAVA 언어에 대하여
    developer-ellen
    developer-ellen

    티스토리툴바