사내에서 자바 커뮤니티를 개설하여 기본 개념은 다시 공부하고 Java8의 새로운 개념, 문법을 공부해보려고한다.
교재는 팀원들과 [이것이 자바다 - 신용권의 Java 프로그래밍 정복] 으로 정하였고 나는 ch6. 클래스부터 참여하였다.
아래는 연습문제풀이 및 스터디 시간에 공유한 내용이다. (코드복붙하다가 인덴테이션이나 문법같은게 조금 깨졌..)
* 디폴트 생성자의 접근지정자
- 명시안하면 클래스의 접근지정자를 따라감
* 싱글톤
- 스프링에서 생성되는 모든 빈은 싱글톤 모드
- JSP도 싱글톤으로 jsp가 서블릿으로 변환되면 계속 그걸로 재사용
- 실무에서 싱글톤 패턴 사용하는 방법은 여러가지가 있는데
- syncronized 키워드 사용은 제일 구현 간단하지만 저 키워드 자체가 lock이 걸려서 진행되기 때문에 성능저하 발생가능
- 요즘엔 Holder 패턴을 많이 쓰는데 classloader 의 특징을 이용해 만든 패턴 >좀 더 자세히 찾아보기
* 클래스의 접근지정자
- 클래스에는 public default 만 사용
* getter/setter 를 왜 쓰는지
* 리플랙션
- 런타임시에 클래스 정보를 가져오는 기법
- 프레임워크를 만든다면 리플랙션은 필수
- 리플랙션하려면 annotation 유지정책을 runtime으로 지정
* 클래스의 로딩시점
- 클래스를 참조할때 클래스로더에 올라가고
- static 변수, 메소드 등은 그때 정의됨
1번 – 3)
하나의 클래스로 여러 개의 객체생성 가능
2번 – 4)
3번 – 4)
필드, 메소드 생략가능
4번 – 3)
생성자/메소드 앞뒤에서 모두 선언가능ㅎ지만
생성자와 메소드 내부에서는 선언할수없음
5번 – 1)
생성자를 실행시키지않으면 객체생성 불가능
6번 – 4)
오버로딩(메소드이름은 같고, 매개변수 형태 다른경우)으로 가능
7번 – 2)
리턴타입은 같아도 됨
8번 – 2)
정적블록 내부에서 인스턴스 필드나 인스턴스 메소드를 사용할수없음
사용하고싶으면 내부에서 객체생성후 참조변수로 접근
9번 – 2)
상수는 초기값 또는 정적블록에서 선언가능
10번 – 4)
클래스만 복사해서 이동하면 사용할수없음
11번 – 3)
동일패키지 내에 속한 클래스들은 접근가능
12번 – 필드, 생성자, 메소드
13번/14번
Public class Member {
private String name;
private String id;
private String password;
private String age;
public Member() {}
public Member(String name, String id) {
this.name = name;
this.id = id;
}
}
15번
Public class MemberService {
Public Boolean login(String id, String password) {
If (“hong”.equals(id) && “12345”.equals(password)) {
return true;
}
Return false;
}
Public void logout(String id) {
System.out.println(id+“님, 로그아웃 되었습니다.”);
}
}
16번
Public class Printer {
Public void println(int val) {
System.out.println(val);
}
Public void println(boolean val) {
System.out.println(val);
}
Public void println(double val) {
System.out.println(val);
}
Public void println(String val) {
System.out.println(val);
}
}
17번
Public class Printer {
Public static void println(int val) {
System.out.println(val);
}
Public static void println(boolean val) {
System.out.println(val);
}
Public static void println(double val) {
System.out.println(val);
}
Public static void println(String val) {
System.out.println(val);
}
}
18번
Public class ShopService {
Private static ShopService singleton;
Private ShopService() {}
Public static ShopService getInstance() {
If (singleton==null) {
Return new ShopService();
}
else singleton;
}
}
19번
Public class Account {
Public static final MIN_BALANCE=0;
Public static final MAX_BALANCE=1000000;
Private int balance;
Public void setBalance (int balance) {
if (MIN_BALANCE <= balance && MAX_BALANCE <= balance) {
This.balance = balance;
}
Return this.balance;
}
Public int getBalance () {
Return this.balance;
}
}
20번
// 현재 몇번째 array 인지 파악하기 위한 용도
public static int curArrCnt = 0;
Private static void createAccount() {
//scanner 로 입력
Account acc = new Account(ano, owner, balance);
System.out.println(“계좌가 생성되었습니다.”);
accountArray[curArrCnt++] = acc;
}
Private static void accountList() {
For(int I = 0 ; I < accountArray.lenth; i++) {
System.out.println(accountArray[i].getAno() + “ ”
+ accountArray[i].getOwner() + “ “ + accountArray[i].getBalance());
}
}
Private static void deposit() {
// scanner 로 계좌번호, 예금액 입력
Account acc = findAccount(ano);
Int curBal = Acc.getBalance();
Acc.setBalance(curBal+balance);
}
Private static void withdraw() {
// scanner 로 계좌번호, 출금액 입력
Account acc = findAccount(ano);
Int curBal = Acc.getBalance();
Acc.setBalance(curBal-balance);
}
Private static Account findAccount(String ano) {
For(int I = 0 ; I < accountArray.lenth; i++) {
If (accountArray[i].getAno() == ano)
Return accountArray[i];
}
}