일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 알버트
- 패스트캠퍼스후기
- 직장인인강
- R
- albert
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- 패스트캠퍼스
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- AI
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- SKT
- 패캠챌린지
- 직장인자기계발
- Today
- Total
제주 탈출 일지
패스트캠퍼스 챌린지 13일차 본문
13일차. 어제는 백신맞고 몸이 좀 안좋았는데 오늘도 그냥 메롱메롱 하다.. 내일은 좋아지겠지..?
16. 여러 인스턴스에서 공통으로 사용하는 변수를 선언하자 - static 변수
여러 인스턴스가 공통으로 사용하는 변수가 필요할 때 static 변수를 사용.
일반 멤버 변수로 하면 각 인스턴스 별로 다른 값을 가지게 됨.
static 변수를 사용하면 메모리의 특정 영역의 변수를 인스턴스들이 공유하게 된다.
하드디스크(프로그램) -> 메모리에 적재(프로세스 -> 스레드)
메모리영역은 데이터 영역, 코드 영역으로 나눠짐
코드 영역은 명령어들이 상주 -> 라인 별로 수행됨
데이터 영역은 상수, 리터럴들이 constant영역에 잡히고, static 변수도 여기에 올라간다.
인스턴스가 올라가는 영역은 힙영역
static 변수가 사라지는 순간은 프로그램이 다 끝나고 영역이 해제될때이다.
인스턴스 생성과 상관없이 사용 가능하므로 클래스 이름으로 직접 참조해서 사용한다.
이 예제에서 employeeKim의 serialNum을 증가 시켜도, employeeLee의 serialNum이 employeeKim의 serialNum과 동일한 것을 알수 있다(공유된다)
그래서 이를 통해 각자의 사번을 결정하려고 하면 다음과 같이 할 수 있다.
employee 클래스
package ch16;
public class Employee {
public static int serialNum = 1000;
private int employeeId;
private String employeeName;
private String department;
public Employee () {
serialNum++; // 한명이 생성되면 사번이 증가
employeeId = serialNum;
}
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
}
employeetest 클래스
package ch16;
public class EmployeeTest {
public static void main(String[] args) {
Employee employeeLee = new Employee();
employeeLee.setEmployeeName("이순신");
System.out.println(employeeLee.serialNum);
Employee employeeKim = new Employee();
employeeKim.setEmployeeName("김유신");
//employeeKim.serialNum++;
System.out.println(employeeLee.getEmployeeName() + "님의 사번은 " + employeeLee.getEmployeeId());
System.out.println(employeeKim.getEmployeeName() + "님의 사번은 " + employeeKim.getEmployeeId());
//System.out.println(employeeKim.serialNum);
}
}
employee 생성자에 serialNum을 각 멤버변수의 ID에 부여하고 serialNum을 증가시키면 모든 인스턴스의 ID가 달라지게 할 수 있다.
데이터 영역, 힙 영역, 스택 영역, 코드 영역에 대한 메모리 영역들은 잘 알아두어야 하는데 다음 강의에서 진행할 것.
17. static 메서드의 구현과 활용, 변수의 유효 범위
static 메서드에서는 인스턴스 변수를 사용할 수 없다.
static 메서드에서 인스턴스와 무관하게 클래스 이름으로 호출 될 수 있기 때문.
-> 멤버 변수가 아예 생성 되어 있지 않을수도 있다.
-> 다른말로 말하면 클래스의 인스턴스가 생성되지 않아도 static 메소드는 호출 할 수 있다.
하지만 일반 메서드에서 static 변수를 사용하는 것은 문제가 없다.
변수의 유효 범위와 메모리
변수 유형 : 지역변수, 멤버 변수, 클래스 변수(static 변수)
static변수는 프로그램이 메모리에 있는 동안 영역을 계속 차지하기 때문에 너무 큰 메모리 할당은 좋지 않다.
싱글톤 패턴이란 디자인 패턴에서 static 변수를 활용하기도 한다.
18. static 응용 - 싱글톤 패턴(singleton pattern)
디자인 패턴 -> 23가지 정도 됨.
객체지향에서 유지보수를 위한 패턴들을 만들었음.
확장성 유지보수에 용이하다.
그 중 하나인 싱글톤 패턴을 공부할 것.
싱글톤 패턴 : 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴.
package ch18;
public class Company {
private static Company instance = new Company(); // 내부에서 인스턴스를 하나 생성.
private Company() {
} // 마음대로 new 할 수 없도록 private
public static Company getInstance() {
if ( instance == null)
instance = new Company();
return instance;
}
}
package ch18;
import java.util.Calendar;
public class CompanyTest {
public static void main(String[] args) {
Company company1 = Company.getInstance();
Company company2 = Company.getInstance();
System.out.println(company1);
System.out.println(company2);
Calendar calendar = Calendar.getInstance();
}
}
Company 클래스 내부의 생성자는 private로 제공되기 때문에, 외부에서 호출할 수 없다. -> new() 할 수 없음.
따라서 내부에서 인스턴스가 생성되고 그 인스턴스르 퍼블릭 메소드로 제공하는 형식으로 인스턴스가 하나만 있도록 유지할 수 있게 된다.
+ java.util의 캘린더 클래스도 싱글톤 패턴으로 사용된다.
오늘 내용은 쉽지만은 않았던것 같다. 그래도 오히려 재미있었다. ^^b
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'패스트캠퍼스 챌린지!' 카테고리의 다른 글
패스트캠퍼스 챌린지 15일차 (0) | 2021.09.20 |
---|---|
패스트캠퍼스 챌린지 14일차 (0) | 2021.09.19 |
패스트캠퍼스 챌린지 12일차 (0) | 2021.09.17 |
패스트캠퍼스 챌린지 11일차 (0) | 2021.09.16 |
패스트캠퍼스 챌린지 10일차 (0) | 2021.09.15 |