JAVA Back-end programming/JAVA

[JAVA]19th February

Jouney 2021. 2. 21. 23:33

final

1번만 할당가능 , 수정불가

final field의 초기값을 줄 수 있는 방법은 딱 두가지 방법밖에 없다.

1.필드 선언시 2.생성자를 통해서

단순 값이라면 필드 선언시에 주는 것이 가장 간단하지만 복잡한 초기화 코드가 필요하거나 객체 생성 시에 외부 데이터로 초기화를 시켜야한다면 생성자를 통해서 초기값을 부여하는 방법을 써야한다.

생성자는 final 필드의 최종 초기화를 마쳐야 하는데 만약 초기화가 되지 않은 final 필드가 있다면 컴파일 에러가 발생한다.

final method의 경우 지식이 부모의 메서드를 재정의 할 수 없다.

 

상수

-public static final

ex)Integer.MAX_VALUE

Integer.MAX_VALUE =100; 이렇게 쓸수없다,상수여서
public class Person {
	//final : 1번만 할당가능 , 수정불가
	public final String nation = "Korea";//선언시 초기화한다.
	public final String ssn;
	//상수
	public static final String COUNTRY ="대한민국";
	protected String name;
	private int age;
	public Person(){this.ssn=" ";}
	Person(String ssn,String name,int age){
		this.ssn =ssn;//생성시 초기화한다.
		this.name=name;
		this.age =age;
	}
	void test() {
		name = "이름수정";
		age=20;
		//-----final은 수정불가
		//nation="한국";->불가능
		//ssn="12345";->불가능
	}
static인 애가 static아닌 애를 그냥 부를수 없음
		DataTypeTest aa =new DataTypeTest();
		aa.printMyType();

getter/setter

정보 은닉(Hiding information)을 위해 사용한다.

보통 클래스의 멤버변수는 private로 접근제한자를 설정한 후

getter와 setter를 통해 멤버변수 값을 변경하거나 호출한다.

public class Employee {
	
		private String id;
		private String name;
		private int baseSalary;
		
		//생성자
		public Employee(String id, String name, int baseSalary) {
			super();
			this.id = id;
			this.name = name;
			this.baseSalary = baseSalary;
		}

		
		//setter(값 수정 목적)/getter(읽기 목적)
		public String getId() {
			return id;
		}

		public void setId(String id) {
			this.id = id;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public int getBaseSalary() {
			return baseSalary;
		}

		public void setBaseSalary(int baseSalary) {
			this.baseSalary = baseSalary;
		}
		
		double getSalary(double bonus) {
			double salary;
			salary = baseSalary + baseSalary * bonus ;
			return salary;
		}
  }

Modifier

public :모든패키지에 접근가능
protected :현재 패키지에서 접근 가능 :다른 패키지에서는 상속받으면 접근 가능
default(생략) : 현재패키지에사민 가능
private :현재 class에서만 접근가능

 

Singleton

자바에서 많이 사용하는 패턴으로 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴을 의미한다.
즉 생성자의 호출이 반복적으로 이뤄져도 실제로 생성되는 객체는 최초 생성된 객체를 반환 해주는 것이다.

일반적인 JAVA코드에선 잘 쓰지 않는다.

class Singleton{
	static Singleton aa;
	private Singleton(){
		System.out.println("기본생성자");
	}
	
	static Singleton getInstance() {
		if(aa==null)
			aa = new Singleton();
		return aa;
	}
}

public class SingletonTest {

	public static void main(String[] args) {
		Singleton s1 =Singleton.getInstance();
		Singleton s2 =Singleton.getInstance();
		System.out.println(s1);
		System.out.println(s2);//객체의 주소가 같이짐 -->Singleton
	}
}