Day14

dokiru·2023년 2월 20일
0

학원

목록 보기
12/51

퀴즈 피드백

  • if문에서 메소드를 탈출하지 않는 이상 아래 있는 코드까지 실행!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
public void setPoint(int p) {
	if (p <= 0) {
	    p = 0;
	}
	this.point = p;
}
  • 출력과 생성은 다르다. 코드는 위에서 아래로 진행

final

  • 초기값이 저장되고 나면 프로그램 실행 도중에(final 변수의 사용 도중에) 값을 수정할 수 없다
  • 선언시에 값을 주기 or 생성자에서 주기
  • final필드를 초기화하지 않고 두면 컴파일 에러

static과 static final

상수

  • 불변의 값은 객체마다 저장할 필요가 없고(공용성) 여러가지 값으로 초기화 될 수 없다 -> static이면서 final
  • 상수 이름은 모두 대문자로 작성하는 것이 관례 ex.EARTH_SURFACE

final

  • final은 객체마다 저장, 생성자의 매개값을 통해서 여러가지 값을 가질 수 있다 (초기값이 저장되면 프로그램 실행 도중에, final을 사용하는 도중에 수정할 수 X)

패키지

  • 클래스를 체계적으로 관리하기 위해 사용
  • 단순히 파일 시스템의 폴더 기능만 하는 것이 아니라 클래스의 일부분이다
  • 클래스 이름이 동일하더라도 패키지가 다르면 다른 파일로 인식한다
  • 사용법 :
  1. import를 사용
import chapter06_3.group2.ClassC;

public class ClassMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        ClassC classC1 = new ClassC();
        }
}
  1. 도트 연산자와 함께 사용 : 상위패키지.하위패키지.클래스
public class ClassMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        chapter06_3.group2.ClassC classC1 = new chapter06_3.group2.ClassC();
        // 파일 시스템에는 chapter06_3 / group 안에 ClassC 클래스
        }
}
  • 패키지 선언 규칙
  1. 숫자로 시작해서는 안되고 '_' , '$'를 제외한 특수 문자를 사용해서는 안된다
  2. java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용해서는 안된다
  3. 모두 소문자로 작성하는 것이 관례다
    -> 여러 회사가 참여하는 대규모 프로젝트의 경우 회사 도메인이름으로 패키지를 만드는 경우 O

접근 제한자

접근 제한적용 대상접근할 수 없는 클래스
public클래스, 필드, 생성자, 메소드없음
protected필드, 생성자, 메소드자식 클래스가 아닌 다른 패키지에 소속된 클래스
default클래스, 필드, 생성자, 메소드다른 패키지에 소속된 클래스
private필드, 생성자, 메소드모든 외부 클래스

클래스의 접근 제한 (public, default)

  • 같은 패키지 내에서만 사용할 것인지, 다른 패키지에서도 사용할 수 있도록 할 것인지 결정
  • default : 같은 패키지에서는 아무런 제한 없이 사용 가능, 다른 패키지에서는 X
  • public : 클래스를 다른 개발자가 사용할 수 있도록 라이브러리 클래스로 개발되어야 한다면 반드시 public!! -> 인터넷으로 배포되는 라이브러리 클래스들도 모두 public

생성자의 접근 제한

생성자 범위설명
public클래스가 public일 경우 O, default일 경우 같은 패키지 내에서만 호출 가능
protected같은 패키지에 속하는 클래스에서 생성자를 호출할 수 있도록 하고 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스면 생성자 호출 가능
default기본값 - 같은 패키지에서는 아무 제한 X, 다른 패키지에서는 생성자 호출할 수 없도록 한다.
private동일 패키지, 다른 패키지 상관없이 생성자를 호출하지 못하도록 제한 -> 클래스 내부에서만 생성자를 호출하고 객체를 만들 수 있다

필드와 메소드의 접근 제한

필드와 메소드의 범위설명
public클래스가 public일 경우 O, default일 경우 같은 패키지 내에서만 호출 가능
protected같은 패키지에 속하는 클래스에서 필드와 메서드를 사용할 수 있도록 하고 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스면 필드와 메서드 사용 가능
default기본값 - 같은 패키지에서는 아무 제한 X, 다른 패키지에서는 필드와 메서드 사용할 수 없도록 한다.
private동일 패키지, 다른 패키지 상관없이 필드와 메서드를 사용하지 못하도록 제한 -> 클래스 내부에서만 사용 가능

싱글톤(Singleton)

  • 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우 사용
  • 조건
  1. 클래스 외부에서 new 연산자로 새로 생성하지 못하도록 막는다.
  2. 객체에 접근해서 값을 바꾸지 못하도록 막는다.
  3. 자기 자신의 객체를 리턴한다.
  • 순서
  1. 클래스 안에 자신의 타입인 private static 필드를 선언하고, 객체를 생성해 초기화 한다.
    -> 외부에서 필드에 접근하면 안되기 때문에 private, 이후에 static 메서드를 통해서 리턴해주어야하기 때문에 인스턴스가 아닌 static 필드 선언

  2. private 생성자를 만든다
    -> 생성자가 외부에서 호출되면 안되기 때문에

  3. 자기 자신의 객체를 리턴하는 getInstance라는 public static 메소드를 만든다.
    -> getInstance라는 메소드는 외부에서 접근해서 호출할 수 있어야하고, 인스턴스를 만들지 않아도 접근할 수 있어야하기 때문에 public + static 메서드를 선언해준다.

+) 외부에서 객체를 얻는 유일한 방법은 getInstance()라는 메소드를 호출하는 방법이다.
+) getInstance는 단 하나의 객체만 리턴하기 때문에 여러번 호출해도 동일한 객체를 참조한다.

package chapter06_3.group1;

public class ClassB {
	// 내부에서 private static 객체 생성 -> 
	private static ClassB classB = new ClassB(); 
    // 이 후 static메서드 안에서 return 해주어야하므로 static, 필드에 접근못하게 하려면 private
	
	// 1. 생성자 private -> 외부에서 new연산자로 새로 생성할 수 없게 만들기
	private ClassB() { 
	}
    
	// 3. 외부에서 접근해서 사용할 수 있도록(public, static) 내부에 만들어놓은 객체 리턴하는 메소드 생성 
	public static ClassB getInstance() {
		// getInstance라고 보통 적음 (싱글톤이라는 걸 한눈에 알기 위해)
		return classB;
	}
}
profile
안녕하세요!

0개의 댓글