개인 공부/TIL

TIL #220523 #JSP #JAVA

kaleb 2022. 5. 23. 23:18
728x90

주말이 사라지고 새로운 주가 시작되었습니다. (주말은 어디갔을까요?)

오늘은 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를 통한 새 인스턴스를 만들수가 없습니다.

< 패턴 규칙 >

  1. 외부에서 인스턴스 생성이 불가능하도록 생성자에 private 접근제한자를 선언하여 정의 ex) private SingletonClass() {}
  2. 자신의 클래스에서 직접 인스턴스를 생성하여 참조변수에 저장 외부에서 인스턴스 생성 없이 접근 가능하도록 static 키워드를 사용합니다. ex) private static 클래스 참조변수명 = new 클래스 ();
  3. 생성된 인스턴스를 외부로 리턴하는 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