TIL - 3월 12일

박경서·2024년 3월 19일
  • 접근 제한자


    같은 클래스같은 패키지다른 패키지
    publicOOO
    defaultOOX
    privateOOX
    protectedOO△(상속관계만)

    public : 모든 접근 허용

    default : 같은 패키지에 있는 객체들만

    protected : 같은 패키지에 있는 객체들과 상속관계 객체들만 허용

    • private : 현재 객체 내에서만 허용
      • setter/getter
        : private를 관리하는 매서드 (단축키 ALT + INS)
        - getter : 내부의 멤버변수에 저장된 값을 외부로 리턴
                    매개변수 X 리턴값 O
        - setter : 외부의 데이터를 전달받아 변수에 저장
                    매개변수 O 리턴값 X
  • 형변환

    public class PrimitiveCast {
        public static void main(String[] args) {
            byte b = 10;
            int i = b; // 묵시적 형변환
    
            b = (byte) i; // 명시적 형변환
    
            float f = 10f;
    
            long l = (long)f; // 명시적 형변환
        }
    • 묵시적 형변환 : 자동으로 실행해 주는 타입 변환
    • 명시적 형변환 : 큰 데이터에서 작은 데이터로 변환될때 작은 데이터 크기에 맞춰주는 것
  • 연산자

    • 증감 연산자

      public class OpEx2 {
          public static void main(String[] args) {
              int a = 5;
              ++a;
      
              System.out.println(++a); //7
              System.out.println(a++); //7
              System.out.println(a);   //8
          }
      }
    • 전위 증감 연산자(++n) : 1증가한 후 값이 연산결과값

      int a = 5;
      
      System.out.println(++a); //6
    • 후위 증감 연산자(n++) : 1증가하기 전 값이 연산결과값

      int a = 5;
      
      System.out.println(a++); //5
      Sttsem.out.println(a); //6
    • 논리 연산자

      1. (결과에 영향을 주지 않는다면 실행되지 않음 )
      2. && (AND 연산자) : 피 연산자가 모두 true 면 true
      3. || (OR 연산자) : 하나라도 true 면 true
    • 비트 연산자 : (결과에 상관없이 모두 실행)

      1. & (AND 연산자) : 피 연산자가 모두 true 면 true
      2. | (OR 연산자) : 하나라도 true 면 true
      3. ^ (XOR 연산자) : 두 개의 값이 다를때 true (a : true, b : false)
      4. ! (부정 연산자) : 피 연산자의 의미를 반대로 바꿈
  • 명명 규칙

    1. 하나 이상의 글자로 이루어져야됨
    2. 첫 번째 글자는 문자 또는 $ , _
    3. 두 번째 이후 글자는 숫자 문자 또는 $ , _
    4. $ , _ 이외는 특수 문자 사용 X
    5. 길이 제한 X
    6. 키워드는 변수 명 X
    7. 상수 값을 표현하는 단어 true false null은 변수 명 X
  • Stack/Heap

    • Stack : 정적으로 할당된 메모리 영역

    • Heap : 동적으로 할당된 메모리 영역

      public class StackHeap {
          public static void main(String[] args) {
              int age = 25; // Stack (age = 25)
              String name = "Jung"; // Stack (name) Heap (String Jung)
              List<String> body = new ArrayList<>();
              body.add("hand"); // Stack (body) Heap (List) (String hand)
              body.add("foot"); // Stack (body) Heap (List) (String foot)
          }
      }
  • Getter / Setter

    • private를 관리하는 메서드

    • private할 때 다른 클래스에서 접근하려면 해당 클래스 안의 메서드를 통해서만 가능하다.

    • getter는 private를 외부로 꺼내는 메서드

    • setter는 private에 값을 넣는 메서드

      public class Book {
          private String title;
          private int price;
      
          public String getTitle() {
              return this.title;
          }
      
          public void setTitle(String title) {
              this.title = title;
          }
      
          public int getPrice() {
              return price;
          }
      
          public void setPrice(int price) {
              this.price = price;
          }
      }
      
  • Getter
    • 내부의 멤버변수에 저장된 값을 외부로 리턴
    • 메개변수는 없고 리턴 값만 있는 메서드로 정의한다.
  • Setter
    • 외부로부터 데이터르르 전달받아 멤버변수에 저장
    • 메개변수만 있고, 리턴 값은 없는 메서드로 정의한다
  • Enum

    • 서로 연관된 상수들의 집합이라고 할 수 있다.
    • 장점
      1. 코드가 단순해지며, 가독성이 좋다.
      2. 인스턴스 생성과 상속을 방지하여 상수값의 타입 안정성이 보장된다 → 미리 정의된 enum 변수안의 상수만을 대입할 수 있기 때문이다.
      3. enum 클래스를 사용해 새로운 상수들의 타입을 정의함으로써 정의한 타입 이외의 타입을 가진 데이터 값을 컴파일시 체크한다.
      4. 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 알 수 있다.
  • 예제
package com.example.enumtype;

public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}

=> Day라는 enum을 생성하여 요일을 열거하였다.

package com.example.enumtype;

public class Today {
    private Day day;

    public void setDay(Day day) {
        this.day = day;
    }

    public Day getDay() {
        return day;
    }
}

=> Today라는 클래스를 생성하여 Day enum 필드를 생성하고
=> getter, setter를 생성하였다.

package com.example.enumtype;

public class TodayTest {
    public static void main(String[] args) {
        Today today = new Today();
        today.setDay(Day.TUESDAY);
        System.out.println(today.getDay());
    }
}

=> Today를 사용하는 TodayTest 클래스를 다음과 같이 작성한다.
=> today의 setDay()메소드에는 Enum타입인 Day가 전달되야 한다.
=> 이 경우 정수로 선언된 상수와 다르게 Day안에 선언된 상수만 값으로 전달 할 수 있다.
=> 위의 코드를 실행하면 다음과 같다.

  • 출력
TUESDAY
profile
안녕하세요, 박경서입니다.

0개의 댓글