본문 바로가기
Programming/JAVA

이론_1.변수,상수 및 타입

by yoon9i 2024. 3. 6.
/*
    <변수,상수 및 타입>

     1.변수(Variable)---------------------------------------------------

     -변수(Variable)는 변할수 있는 수(값)을 의미한다.

        [타입] [변수 이름]; //타입 한칸띄우고 변수이름

     혹은

        [타입][변수 이름] = [초기 값];

     형태로 선언(Declare) 할수 있다.

     -명명법(Naming Convention)으로 카멜 케이스(Camel Case)를 사용해야한다.

     -명명법(Naming Convention)

         #카멜 케이스(Camel Case)
         : 소문자로 시작하고, 단어간 구분을 대문자로 하는 명명법.
         가령, someMethod,someVariable,camelCase ...
         ex) 학생이름(Student Name)
             변수이름-> studentName : 카멜케이스

             *Java 에서 메서드,매개변수,지역변수,멤버변수의 이름에 사용된다.

         #파스칼 케이스(Pascal Case)
         :대문자로 시작하고 단어간 구분을 대문자로 하는 명명법.
         가령, SomeClass,SomeEnumeration,P3`ㅇascalCase...

            *Java 에서 클래스,열거형,인터페이스,어노테이션의 이름에 사용한다.

         #케밥 케이스(Kebab Case)
         :전체 소문자이고 단어간 구분을 대쉬(-)로 하는 명명법.
         가령, some-class,some-id,some-attribute...

            *Java 에서 사용되지 않음.

         #스네이크 케이스(Snake Case)
         :전체 소문자이고 단어간 구분을 언더스코어(_)로 하는 명명법.
         가령, some_name,some_php,some_thing...

            *Java 에서 사용되지 않음.

         #어퍼 스네이크 케이스(Upper Snake Case)
         :전체 대문자이고 단어간 구분을 언더스코어(_)로 하는 명명법.
         가령, SOME_NAME,SOME_THING,SOME_CONST...

            *Java 에서 정적이고 읽기 전용인 (static final) 멤버변수,열거형 인자의 이름에 사용된다.
            단,정적이고 읽기전용인 대상 중 그값이 리터럴(Literal)이지 않고 객체인 경우 카멜 케이스를 사용하기도 한다.

        ex)
        Math.PI : Math - 파스칼 케이스 , PI - 어퍼 스네이크 케이스


     - 변수의 이름은 명사(Noun)이어야 하고, 논리(Boolean) 타입일 경우 `is형용사` 혹은 `is동명사`,`동명사` 이거나
       3인칭 단수형의 동사(Verb)인 것이 좋다.
         ex)
         <명사>
          int studentAge; (O)
          int saySomething; (x)

     - 키워드(Keyword)를 이름으로 사용할 수 없다.
        ex) long byte; (x)
     - 동일하거나 보다 상위의 스코프(Scope)에서 이미 사용된 이름을 사용할수 없다.
     - 선언된 지역 변수의 값이 초기화되어 있지 않은 경우 값 대입을 제외한 그 어떤 접근도 할수 없다. (값이 없는 상황)
     - 선언된 멤버 변수의 값이 초기화되지 않은 경우 숫자(정수, 실수 전부)의 경우 0으로, 'boolean' 의 경우 false 로,
       'char' 의 경우 빈 값으로 초기화가 이루어진다.
     - 지역 상수의 경우 선언과 동시에 값 초기화를 해줄 필요가 없지만, 멤버 상수의 경우 선언과 동시에 값 초기화가 이루어지지 않으면
       안된다.

     1-1. 변수의 종류

     - 지역 변수(Local Variable) : 메서드 내부에 만들어졉 있는 변수를 의미한다. 메서드 실행 종료시 다시는 접근할 수 없는
                                   변수들이고, 1회성이 강하다.
     - 멤버 변수(Member Variable) : 클래스가 바로 가지고 있는 변수를 의미한다. 클래스 객체화시 해당 클래스에 대한 접근점이
                                    사라지지 않는다면 영원히 존재하는 변수들이고, 지속성이 강하다.
     - 매개 변수(Parameter) : 메서드를 정의할때 해당 메서드가 인자로 받을 값의 변수 타입을 나열한 것이다.


     1-2. 멤버 변수

     ◎ 멤버 변수(Member Variable)는 클래스가 직접 가지고 있는 변수로, 아래와 같이 선언할수 있다.

          [접근 제한자] [static]? [final]? [타입] [이름];

          혹은

          [접근 제한자] [static]? [final]? [타입] [이름] = [초기 값];






     2.상수(Constant)----------------------------------------------------
     ? 자바에는 상수가 없다 : 구글링 해보면 도움됨

        -Java 언어에 상수는 엄밀히 얘기하면 존재하지 않고, 읽기 전용(Read-Only)개념이다.
        -값이 어떠한 변수에 대입된 후 다시 '변경될 수 없는 것'들을 의미한다.

            final [타입] [변수이름];

        혹은
            final [타입] [변수 이름] = [초기 값];


         형태로 선언(Declare)할수 있다. 단,멤버 상수(Member Constant)는 선언과 동시에 값 초기화가 이루어지거나
         생성자(Constructor)를 통해 값을 대입해야만 한다.

     3.타입(Type)--------------------------------------------------------
     *기초타입과 참조타입 명확하게 구분 : 기초타입은 소문자로 시작 하고 참조타입은 대문자로 시작한다

        3-1. 기초 타입(원시 타입,Primitive Type)

        -`byte` : 정수(Byte)타입으로 , `-128` 부터 `127`까지의 정수를 가질수 있다.
        -`short` : 정수(Short integer)타입으로 -32,768 부터 32,767 까지의 정수를 가질수 있다.
        -`int` : 정수(integer)타입으로, `-2,147,483,648` 부터 `2,147,483,647` 까지의 정수를 가질수 있다.
        -`long` : 정수(Long integer)타입으로, `-9,223,372,036,854,775,808` 부터  `9,223,372,036,854,775,807`
                  까지의 정수를 가질수 있다. 접미어(Suffix,꼬리에 붙는 말 <-> 접두어)로 L 을 사용한다.
               ex) long something = 123; //123 - int타입 ,something - long타입
                   long something = 123L; //123L - long타입

        -`boolean` : 논리(Boolean) 타입으로 참(true) 과 거짓(false)만 그값으로 가질수있다.

           ex)
               <사용방법>
               boolean age = 15; (x)

               boolean isDead = true; (o)
               boolean isAlive = false; (o)
               boolean isEating = false; (o)
               boolean eating = false; (o)

               boolean contain = false; (o)

        -`char` : 문자(Character) 타입으로, 문자 한개만 가질수 있다.단, 값을 가지지 않을 수 없다.
                  문자 표시를 위해 홑 따옴표('') 특수 기호를 이용해야 한다
                  ex) char abc = 'f';

        -`float` : 실수(Float) 타입으로 , 1.40239846 와 10의 -45승 부터 3.40282347와 10의 38승의 곱 까지의 값을 가질수 있다.
                   단, 메모리를 아끼기 위한 특수한 조치때문에 소수점 끝자리가 유실되거나
                   이에 오류(Margin Error)가 발생할수 있다. 접미어로 F 를 사용해야한다.
                   *3.40282347와 10의 38승의 곱 : 오른쪽으로 38자리 갈수있다.
                   ex) 3.14F

        -`double` : 실수(Double) 타입으로,  -4.94065645841246544와 10의 324승의 곱 부터 1.79769313486231570와 10의 308승
                    의 곱까지의 값을 가질수 있다. 마찬가지로 오류가 발생할수 있지만 미미함으로 대부분의 경우에는 무시하고 사용한다.
                    접미어로 D 를 사용하거나 생략한다.
                    ex) 3.14D or 3.14

        3-2. 참조 타입(Reference Type)

        -`String` : 문자열(String) 타입으로, 문자 여러개를 가질수 있다. 문자열 표시를 위해 쌍따옴표("") 특수 기호를 이용해야 한다.


     4. 배열(Array)------------------------------------------------------------------------

        - 배열은 어떠한 동일한 타입에 대해 하나의 변수에 여러개의 값(객체)을 가지게 하기위해 사용한다.
        - 배열이 가지는 각 인자는 번호를 가지며 그 번호는 반드시 0부터 시작한다.
        - 배열의 타입으로 사용하고자 하는 타입 뒤에 대괄호 ( [] )를 붙여 이가 어떠한 타입에 대한 배열임을 알린다.
        - 배열의 초기화는 길이 초기화 혹은 인자 초기화 두 방식 중 하나를 이용해야 하며 두 방식을 동시에 이용할 수 없다.
        - 배열은 한번 초기화되었을 때 그 길이가 지정되고 다시 초기화하지 않는 이상 그 길이를 줄이거나 늘릴수 없다.

            T[] ts;

            위와 같이 선언하고 가령 정수 배열을 선언하고자 할때는 아래와 같이 선언한다

            int[] numbers;

            int[] 타입은 정수가 아닌 정수 배열로, numbers 변수는 정수 여러개를 가질 수 있다.

        4-1. 길이 초기화

            - 배열의 길이를 지정하여 초기화하는 방식으로, 이 배열이 가질 수 있는 인자의 개수를 지정하는 방식이다.

                T[] ts = new int[x];

                위 코드에서 변수 ts 는 T 타입의 값(객체)를 x개 만큼 가질 수 있다는 의미이다.

                int[] numbers = new int[10];

                위 코드에서 변수 numbers 는 10개의 정수를 가질 수 있는 배열 임을 의미한다.


        4-2. 인자 초기화

            - 배열의 길이를 지정하지 않고 초기화시 배열이 가지는 인자를 직접 전달하는 방식이다.

                   T[] ts = new T[] {a , b ,c ,.....};

                   위 코드에서 변수 ts 는 T 타입의 값(객체)인 a , b 및 c를  가지는 T 타입의 배열이다.

                   int[] odds = new int[] {1, 3, 5, 7, 9};

                   위 코드에서 변수 odds 는 1, 3, 5, 7 및 9 총 다섯개의 인자를 가지는 정수형 배열이다.
                   마찬가지로 위 코드는 아래와 같이 간략하게 작성할 수 있다.

                   ------------------------------------

                   int[] odds = {1, 3, 5, 7, 9};

                   int[] nums = new int[5];

                   or

                   int[] nums = new int[] {1,3,5,7,9};

                   둘중 하나만 쓰고 섞어서 쓰지 말것

                   ------------------------------------

        4-3. 요소 접급

           - 어떠한 배열이 가지고 있는 요소에 접근할때에는 배열 요소 연산자를 사용하여 접근하고자 하는 요소의 번호(인덱스)
             를 제공하여 접근할수 있다.

                 T[] ts = new T[] {a, b ,c};

                 위 코드에서 b 요소에 접근하기 위해서는 아래와 같이 작성한다.

                 ts[1]

                 주의할 점은 배열의 요소가 가지는 번호는 항상 0번 부터 시작함으로 위와 같이 두 번째 요소에 접근하기
                 위한 번호는 1번이 된다.

                 //-----------------------------
                 int [] odds = new int[] {1, 3, 5, 7};

                 odds[2]; //5
                 //--------------------------------
                 int [] odds = {1, 3 ,5 ,7 ,9};

                 odds[4] = 10;
                 지우거나 빼는것은 새로운 배열을 만들어야 하지만 값을 재할당은 가능하다.
                 //--------------------------------

        4-4. 길이 속성 `length`

            - 어떠한 배열이 가지고 있는 오소들의 개수인 속성이다.

                T[] ts = new T[10];
                System.out.println ( ts.length ); //10

                위와 같이 어떠한 배열의 length 속성은 이 배열이 가지고 있는 요소의 개수를 의미함으로 어떠한 배열이
                가지고 있는 마지막 요소의 번호(인덱스)는 항상 어떠한 배열의 length 값에서 1을 뺀 값이다.
                //-----------------------------------------
                int [] odds = {1, 3 ,5 ,7 ,9};

                System.out.println ( odds.length ); //5
                System.out.println ( odds.length -1 ); //4
                //------------------------------------------

*/

'Programming > JAVA' 카테고리의 다른 글

이론_6. SWITCH  (0) 2024.03.06
이론_5. FOR 문 & 향상된 FOR  (0) 2024.03.06
이론_4.IF  (0) 2024.03.06
이론_2.주석  (0) 2024.03.06
이론_0.기타  (0) 2024.03.06