[JAVA] 헷갈렸던거 정리(static, 생성자, 기본생성자, 초기화)

2022. 9. 9. 17:55·📂 Backend Engineering
728x90
반응형

1. static


[static 변수]

1. static 한 변수는 공유된다.

2. static 한 변수는 값을 저장할 수 있는 하나의 공간이 생성된다. -> 인스턴스가 여러 개 생성해도 static 한 값은 마지막의 값으로 결정된다.

 

[static 메소드]

1. static 한 메서드는 Class가 인스턴스화 되지 않아도 사용할 수 있다.

2. static 한 메서드에서는 static 한 변수만을 사용할 수 있다.

    public class VariableScopeExam {
        int globalScope = 10; 

        public void scopeTest(int value){
            int localScope = 20;            
            System.out.println(globalScope);
            System.out.println(localScope);
            System.out.println(value);
        }   
        public static void main(String[] args) {
            System.out.println(globalScope);  //오류
            System.out.println(localScope);   //오류
            System.out.println(value);        //오류  
        }   
    }

 

2. 생성자


클래스 변수명 = new 생성자()

 

 

[모든 클래스는 인스턴스화 될 때 생성자를 사용한다.]

  • 생성자를 프로그래머가 만들지 않으면  매개변수가 없는 생성자가 컴파일할 때 자동으로 만들어진다.
  • 매개변수가 없는 생성자를 기본 생성자라고 한다.
  • 생성자를 하나라도 프로그래머가 만들었다면 기본 생성자는 자동으로 만들어지지 않는다.

 

728x90

[생성자의 역할]

  • 객체를 생성하면서. 하고 싶은일들, 해야할 일들을 정의한다.(객체가 될 때 필드를 초기화하는 역할을 수행한다.)
//this.를 활용한 초기화 - Person 생성자 생성

class Person{
    int age;
    
    Person(int number) {
        this.age = number; 
    }
}

Person 클래스에서 Person 생성자를 만들어주었으며 이는 Person 클래스를 생성할 때 number 값을 정의하도록 세팅해둔것

[디폴트 생성자]

클래스가 생성될 때 프리 컴파일 단계에서 jvm이 생성자 존재 유무를 판단해서 디폴드 생성자를 만들어준다.

그러나 생성자를 하나라도 만들었다면, jvm이 디폴트 생성자를 만들지 않는다.

 

 

[자기 자신을 호출하는 생성자 키워드] 

기본 생성자를 호출하였을 때 name을 "이름 없음" , 숫자를 0으로 초기화 하기

 

이렇게 하면 중복으로 오류 발생

    public Car(){
        this.name = "이름없음";
        this.number = 0;
    }

 

[this 키워드를  사용하여 기본 생성자 호출 및 초기화 하기]

 public Car(){
        this("이름없음", 0);
    }
  • this괄호로 시작하면 자신의 생성자를 호출하는 것이다.
  • 자기 자신의 생성자를 호출함으로써 비슷한 코드가 중복돼서 나오는 것을 방지할 수 있다.

 

3. enum타입 열거형과, 상수(Final) 변수 선언의 차이


[상수 선언 방법의 문제점]

   public class EnumExam {
        public static final String MALE = "MALE";
        public static final String FEMALE = "FEMALE";

        public static void main(String[] args) {
            String gender1;
            
            genter1 = "나는 빡빡이"; //이게 가능해서 상수키워드 변수 선언은 사용을 잘 안함

            gender1 = EnumExam.MALE;
            gender1 = EnumExam.FEMALE;                  
        }
    }

 

[enum타입 사용]

enum Gender{
	MALE, FEMAIL;
}
Gender gender2;

    gender2 = Gender.MALE;
    gender2 = Gender.FEMALE;

특정 값만 가져야 한다면 열거형을 사용하는 것이 좋다.

 

 

혹시 더 좋은 방법이 있다면 댓글로 피드백 부탁드리겠습니다! 감사합니다.

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'📂 Backend Engineering' 카테고리의 다른 글

콜라츠 추측 함수로 쪼개어 풀어보기  (0) 2022.10.01
[JAVA] Super() 키워드 예제 / Super 부모, 자식  (2) 2022.09.09
[JPA] JPA의 OSIV란? OSIV 적용예제, OSIV 성능최적화 방법  (0) 2022.08.29
[Querydsl] 연관관계가 없는 테이블 연결 하기 / 연관관계 없는 엔티티 외부조인  (0) 2022.08.16
[JPA] @Inhertance 조인 전략 / 상속관계 매핑  (0) 2022.07.30
'📂 Backend Engineering' 카테고리의 다른 글
  • 콜라츠 추측 함수로 쪼개어 풀어보기
  • [JAVA] Super() 키워드 예제 / Super 부모, 자식
  • [JPA] JPA의 OSIV란? OSIV 적용예제, OSIV 성능최적화 방법
  • [Querydsl] 연관관계가 없는 테이블 연결 하기 / 연관관계 없는 엔티티 외부조인
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    반응형
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (104) N
      • ⭐ Featured (4)
      • 📂 Backend Engineering (36)
      • 📂 Troubleshooting & Ops (10)
      • 📂 Infra & System (7) N
      • 📂 Reflections (21)
        • Year-in-Review (5)
        • Work & Career (10)
        • Lessons Learned (6)
      • 📂 Team Journal (10)
      • 📂 Archive (16)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Azure log 비용 줄이기
    db 날림
    validation failed (numeric string is expected)
    nestjs pipe body
    di동작원리
    해피해킹 방향키
    인프라 로그 저장 비용 감소하는 방법
    Azure 로그 최소 저장 30일
    typedi란
    해피해킹 커스텀
    githubaction 라벨 ci/cd
    스냅샷과 히스토리
    githubaction 라벨 배포
    di의존성
    db 초기화
    typedi 동작원리
    azure ci/cd
    di란
    해피해킹 꿀팁
    토이프로젝트개발일지
    db 날린 썰
    JPA
    QueryDSL
    스냅샷과히스토리성 차이
    개발썰
    해피해킹 키매핑
    해피해킹 카라비너
    창업패키지후기
    nestjs pipe
    서이추
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
foodev
[JAVA] 헷갈렸던거 정리(static, 생성자, 기본생성자, 초기화)
상단으로

티스토리툴바