프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Static 을 사용하지 않을 경우
인스턴스 변수에 접근하기 위해 this를 사용한다.
메서드 내부에서도 this를 통해 인스턴스 변수에 접근할 수 있다.
인스턴스 변수인 n, answer, computers, visit은 각 객체가 가지는 고유한 변수이다.
서로 다른 인스턴스를 만들면 이 변수들은 각기 다른 값을 가질 수 있다.
[ 장점 ]
- 객체마다 독립적인 상태를 유지할 수 있다. 객체 지향 설계
- 개별 객체가 서로 다른 데이터를 가질 수 있기 때문에 코드가 더 유연해지고 유지보수성이 높아진다.
- 캡슐화가 가능하다. 각 객체의 상태를 객체 내부에서만 관리할 수 있어, 데이터를 안전하게 다룰 수 있다.
[ 단점 ]
- 객체를 반드시 생성해야한다.
- 메모리 사용량이 증가한다.
import java.util.*;
class Solution {
int n, answer;
int[][] computers;
boolean[] visit;
public int solution(int n, int[][] computers) {
this.n = n;
this.computers = computers;
answer =0;
visit = new boolean[n];
for(int i=0; i<n; i++){
if(visit[i]) continue;
DFS(i);
answer++;
}
return answer;
}
public void DFS(int idx){
visit[idx] = true;
for(int i=0; i<n;i++){
if(!visit[i]&&computers[idx][i]==1)
DFS(i);
}
}
}
Static 을 사용할 경우
모든 변수가 static으로 선언된다.
따라서 이 변수는 모든 인스턴스가 공유하는 변수가 된다.
인스턴스 변수는 각 인스턴스마다 독립적으로 존재하는 변수로, 서로 다른 인스턴스는 서로 다른 값을 가질 수 있다.
[ 장점 ]
- 클래스 수준에서 공통 데이터를 관리할 수 있다.
클래스에 속한 모든 인스턴스가 동일한 데이터를 사용해야 할 때 유용하다.
- static 변수는 한 번만 메모리에 할당되고, 모든 객체가 같은 값을 공유하므로 메모리 효율이 높을 수 있다.
- 인스턴스 없이도 생성 가능하다.
[ 단점 ]
- 공유된 상태 관리가 어렵다.
여러 곳에서 동일한 변수를 공유하면, 의도치 않은 값 변경이 발생할 수 있어 디버깅이 어려워진다.
특히 멀티스레드 환경에서는 동기화 문제가 발생할 수 있다.
- 유연성 부족
객체마다 다른 데이터를 가질 수 없고, 모든 인스턴스가 같은 데이터를 사용해야 하기 때문에, 개별적으로 다른 상태를 관리하는 것이 불가능하다.
import java.util.*;
class Solution {
static int n, answer;
static int[][] computers;
static boolean[] visit;
public int solution(int n, int[][] computers) {
Solution.n = n;
Solution.computers = computers;
answer =0;
visit = new boolean[n];
for(int i=0; i<n; i++){
if(visit[i]) continue;
DFS(i);
answer++;
}
return answer;
}
public static void DFS(int idx){
visit[idx] = true;
for(int i=0; i<n;i++){
if(!visit[i]&&computers[idx][i]==1)
DFS(i);
}
}
}