주말이 사라지고 새로운 주가 시작되었습니다. (주말은 어디갔을까요?)
오늘은 JSP수업이 있을 줄 알고 긴장하고 왔지만 오전 직업기초시간, 오후 JAVA수업으로 비교적 편안한 하루가 될줄 알았지만 복습하다가 시간이 다 가버렸습니다....
점점 피곤해지는 군요 ㅜㅜ 그래도 파이팅해봅시다!
오전 복습!
오늘 복습해야할 부분!
개념 : JAVA의 생성자 Getter/Setter 진짜 매일 까먹습니다.
연습 : JSP의 insertForm2(심화버전)
Java의 개념 정리 (복습)
클래스 :
객체를 생성하기 위한 필드와 메소드가 정의 되어있습니다.(설계도)
객체의 대표 이름 하나를 결정하고 그것을 클래스의 이름으로 정합니다.
new 연산자 :
new 클래스 (); 의 형태를 가집니다. new 연산자로 생성된 객체는 메모리 힙 영역에 생성됩니다.
(객체의 번지를 리턴)
클래스 변수 = new 클래스 ();
클래스 변수에 주소 참조타입을 저장해두면 변수를 통해서 객체를 사용할 수 있습니다. (선언된 변수가 객체를 참조)
필드 : 객체의 고유 데이터 클래스를 설계 할때 필드로 선언 되어야 하는 것들을 의미합니다.
(멤버변수)
생성자 : 객체 생성 시 초기화를 담당 합니다. 필드를 초기화 또는 메소드를 호출하여 객체를 사용할 준비를 합니다.
클래스 내부에 생성자 선언을 생략 했다면 컴파일러는 내용이 비어 있는 기본 생성자를 자동적으로 추가합니다.
인스턴스 : 클래스로부터 만들어진 객체(하나의 클래스로 여러 개의 인스턴스를 만들 수 있습니다. 자동차 설계도 하나로 여러 대의 자동차를 만드는 것과 동일합니다!)
Getterr와 Setter 메소드:
객체의 필드를 객체 외부에서 직접적으로 접근하는 것을 막는 이유?
외부에서 마음대로 변경이 가능할 경우 객체의 무결성(걸점이 없는 성질) 이 깨질 수 있습니다.
⇒ 필드는 외부에서 접근할 수 없도록 막고 메소드를 공개하여 외부에서 메서드를 통해 필드에 접근하도록 유도합니다.
Setter메소드 : 매개값을 검증해서 유효한 값만 객체의 필드로 저장할 수 있게 합니다.
(외부에서 값을 받아 필드를 변경하는 메서드)
Getter메소드 : 필드값을 가공한 후 외부로 전달합니다.(필드의 값을 외부로 리턴)
(필드 타입이 boolean의 경우 Getter는 get으로 시작하지 않고 is로 시작합니다.)
JSP 복습
구상
에러 잡는다고 시간이 정말 많이 소요됬습니다.ㅜㅜ 순서를 잘 이해하고 여러번 반복해봅시다!
코드는 따로 공유하지 않도록 하겠습니다.
오후 JAVA
정적(Static) 멤버 : 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말합니다.
(정적 멤버는 클래스에 소속된 멤버이므로 클래스 멤버라고도 합니다.)
정적 멤버 선언
정적 필드와 정적 메소드는 클래스에 고정된 멤버이기 때문에 클레스의 로딩이 끝나면 바로 사용할 수 있습니다.
기본 문법 :
클래스명.변수명 또는 클래스명. 메서드명() 의 형태로 접근합니다.
자바 프로그램 실행 과정
- 소스코드 작성 및 컴파일 후 클래스 실행
- 클래스의 로딩 (static 변수 및 메서드가 메모리에 로딩됩니다.)
- main 메서드가 호출됩니다.
- 인스턴스 생성(인스턴스 변수 및 메서드가 메모리에 로딩됩니다.)
- 인스턴스 메서드 호출 및 실행
싱글톤 디자인 패턴(Singleton Design Pattern) 단 하나의 유일한 인스턴스만을 생성하여 공유하도록 하는 기법입니다. 외부에서 인스턴스를 생성 하지 못하도록 차단하고 클래스 내에서 직접 인스턴스를 생성 후 외부로 리턴하는 기법 ! 누구나 단 하나의 인스턴스만을 공유하여 사용해야합니다. 즉, 외부에서 new를 통한 새 인스턴스를 만들수가 없습니다.
< 패턴 규칙 >
- 외부에서 인스턴스 생성이 불가능하도록 생성자에 private 접근제한자를 선언하여 정의 ex) private SingletonClass() {}
- 자신의 클래스에서 직접 인스턴스를 생성하여 참조변수에 저장 외부에서 인스턴스 생성 없이 접근 가능하도록 static 키워드를 사용합니다. ex) private static 클래스 참조변수명 = new 클래스 ();
- 생성된 인스턴스를 외부로 리턴하는 Getter 메서드 정의 private 접근제한자로 선언된 멤버변수 instance에 접근하여 생성된 인스턴스를 리턴하는 용도로 정의 합니다. 즉 인스턴스 생성없이 호출되어야 하므로 static 키워드가 사용됩니다.
싱글톤 예제
package static_member;
public class Ex4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
/* SingletonClass sc = SingletonClass.instance;
* private로 선언되었기 때문에 The field SingletonClass.instance is not visible error가 나옵니다.
* => getInstance() 메서드 호출을 통해서 가져와햐합니다.
* 클래스명.메서드() 의형태로 호출 할수 있습니다.
* 즉, 인스턴스 생성 없이도 클래스 내의 메서드를 호출 할 수 있습니다.
*/
SingletonClass sc = SingletonClass.getInstance();
//리턴 받은 인스턴스는 참조변수 sc를 통해서 접근이 가능합니다.
sc.str = "싱글톤 패턴으로 생성한 인스턴스 str입니다.";
System.out.println(sc.str);
}
}
class SingletonClass {
String str; //임시 확인용 변수
// 기본 생성자 정의
/* public SingletonClass() {}
singleton으로 사용하고자 한다면(외부에서 인스턴스 생성이 불가능하도록 한다면) 기본생성자 형성시
접근제한자를 private으로 설정해줍니다.
*/
private SingletonClass() {}
// 2번규칙 자신의 클래스 내에서 인스턴스를 직접 생성 후 참조 변수에 저장합니다.
private static SingletonClass instance = new SingletonClass();
// 3번규칙 생성된 인스턴스를 외부로 리턴하는 Getter 메서드의 정의
public static SingletonClass getInstance() {
return instance;
}
}
Test 연습
package static_member;
public class Test4 {
public static void main(String[] args) {
Account acc = Account.getInstance();
// 인스턴스가 static으로 선언 되었기 때문에 가능함
acc.setAccountNo("111-1111-1111");
acc.showAccontInfo();
}
}
/*
* Account 클래스에 대한 싱글톤 패턴 구현
*
* 1. Account 인스턴스 생성 시 오류가 발생하는지 확인합니다.
*
* 2. 생성된 인스턴스를 리턴 받습니다.
*
* 3. 리턴받은 참조 변수를 통해서 Setter(?) () 메서드를 호출하여
* 계좌번호 "111-1111-111"로 저장하고, showAccountInfo() 메서드를 통해서 변경된 내용을 확인합니다.
*
* 4. Account 클래스에 대한 싱글톤 패턴 구현
* - 멤버변수 accontNo, ownerName, balance 접근제한자 private
* - 멤버변수 Getter(), Setter() 메서드 설정
*
*/
class Account {
// 인스턴스 생성
private static Account instance = new Account();
// 기본 생성자 생성
private Account () {}
// getter의 선언
public static Account getInstance() {
return instance;
}
// 멤버변수 선언
private String accountNo;
private String ownerName;
private String balance;
public String getAccountNo() {
return accountNo;
}
public void setAccountNo(String accountNo) {
this.accountNo = accountNo;
}
public String getOwnerName() {
return ownerName;
}
public void setOwnerName(String ownerName) {
this.ownerName = ownerName;
}
public String getBalance() {
return balance;
}
public void setBalance(String balance) {
this.balance = balance;
}
//showAccountInfo 메서드
public void showAccontInfo() {
System.out.println("계좌번호 : " + accountNo);
System.out.println("예금주명 : " + ownerName);
System.out.println("잔고 : " + balance);
}
}
해야될 것들이 쌓이고 쌓이니깐 정말 시간을 효율적으로 사용해야 할 것 같습니다. 아직 반도 안 왔지만 힘내서 끝까지 파이팅해봅시당!
'개인 공부 > TIL' 카테고리의 다른 글
TIL #220526 #JSP #WEB (0) | 2022.05.26 |
---|---|
TIL #220524 #JSP #JAVA (0) | 2022.05.24 |
TIL #220522 #JSP (0) | 2022.05.23 |
TIL #220521 #JSP (6) | 2022.05.22 |
TIL #220520 #JSP #DB (0) | 2022.05.20 |