본문 바로가기
스파르타 내배캠

[TIL] #6. fianl, static

by saemsaem 2024. 4. 27.


 [ 알고리즘 세션 ] 

의사코드 (pseudo-code)

: 코드를 흉내내서 읽기 쉽게 적어놓은 것. 문법보다는 코드의 흐름을 미리 적는 것!

시간복잡도 (time complexity)

: 알고리즘이 얼마나 효율적인지 평가하는 기준

- Big-O 표기법
  : O(n^2) : n^2에 비례하는 시간이 소요된다는 뜻
O(1) < O( 𝑙𝑜𝑔𝑛 ) < O(n) < O(n 𝑙𝑜𝑔𝑛 ) < O( 𝑛2 ) < O( 2𝑛 ) < O(n!)

 

 

 [ 개인과제 (Calculator) ] 

level 2 - 7에서 final과 static을 어디에 선언하면 좋을지에 대해 고민했다. 

[ final ]

:오직 한 번만 할당할 수 있는 entity를 정의할 때 사용된다. 

final 변수

1. 원시타입 : 로컬 원시 변수에 final로 선언하면 한번 초기화된 변수는 변경할 수 없는 상수값이 된다.

public void test_final_primitive_variables() {
    final int x = 1;
    //x = 3; //한번 assign되면 변경할 수 없음.
}

2. 객체 타입

public void test_final_reference_variables() {
    final Pet pet = new Pet();
		//pet = new Pet(); //다른 객체로 변경할수 없음

    pet.setWeight(3); //객체 필드는 변경할 수 있음
}

3. 메서드 인자 : 메서드 안에서 변수값을 변경할 수 없다.

public class Pet {
    int weight;
    public void setWeight(final int weight) {
	    weight = 1; //final 인자는 메서드안에서 변경할 수 없음
    }
}

4. 멤버변수 : 상수값이 되거나 write-once 필드로 한 번만 쓰이게 된다.

 

final 메서드

  • 상속받은 클래스에서 오버라이드할 수 없음.
  • 구현한 코드를 변경하고싶지 않을 때 사용함.

 

final 클래스

  • 상속이 되지 않고, 그냥 클래스 그대로 새용해야 함.
  • 여러 상수 값을 모아둔 constants클래스를 final로 선언함

 

[ static

: 정적인, 고정된
: 딱 한번만 할당되어 메모리를 효율적으로 사용할 수 있다.

  • 어떤 객체에 소속되는 것이 아닌, 클래스에 고정되어 있는 것
  • 특징
    1. 메모리에 고정적으로 할당된다.
      : 각 객체들에서 공통적으로 하나의 값이 유지되어야 할 경우 유용하게 사용할 수 있음
    2. 객체 생성 없이 사용할 수 있다
    3. 프로그램이 시작되면 메모리의 static영역에 적재되고, 프로그램이 종료될 때 해제된다
    4. static 메서드 내에서는 인스턴스 변수를 사용할 수 없다.
  • 사용목적 : 모든 클래스에서 호출 가능한 전역변수나 전역함수를 만들기 위해 사용