TIL 10일차

Moon-Tree·2023년 1월 12일
0

◎ JAVA

◆ Final

Final 키워드

  • 최초 이후의 작업을 금지하는 역할
  • 변수는 할당 금지, 메소드는 재정의 금지, 클래스는 상속 금지

필드에서 Final을 사용하려고 할 때

  • final 필드는 반드시 초기화가 되어야 한다.
  • 생성자에 반드시 final 필드를 초기화 하도록 코드를 구현해야 한다.
  • (주의) final 필드는 setter(변경을 대행하는 메서드)메서드를 만들지 못한다.
public class Product {
	// 값을 입력하지 않았기 때문에 String의 초기 값이 출력됨.    	
	private final String productName;
	private String type;

	//오버로딩
	public Product(String productName) {
		this.productName = productName;
		this.type = "과자";
		this(productName, "과자");  //생성자 몰아주기
	}
	public Product(String productName, String type) {
		this.productName = productName;
		this.type = type;
    }
}
  • (주의) final 필드는 setter(변경을 대행하는 메서드)메서드를 만들지 못한다.

    ex)
    	// public void setProductName(String productName) {
    	//		this.productName = productName;
    	//	}

◆ Static

  • 정적 데이터 (탈 객체 지향 키워드)
  • 프로그램 시작 ~ 프로그램 종료 할 때까지 메모리에 저장 되어있다.
  • 데이터를 정적(static)과 동적(dynamic)으로 구분하여 생각하자!
  • 정적인 데이터는 객체를 만들지 않아도 출력할 수 있으며, 모두가 동일하게 관리되어야 한다.
  • static이라는 키워드를 이용해서 표시를 해준다.
  • setter/getter 메서드도 static으로 구현해야 한다.
  • static 메서드 안에서는 this를 사용할 수 없다.
  • 멤버 변수만 접근제한자(static)를 사용할 수 있다.
  • 메소드 안에 있는 지역 변수에는 접근제한자를 사용 할 수 없다.
  • static 의 장점
    객체에서 나와서 일괄적으로 관리 할 수 있다.
  • static 의 단점
    여러번 사용 할 수록 메모리에 할당이 많아져서 속도가 느려지고 성능은 조금 안좋아진다.
	public class GalaxyFold4 {
		private static String company = "삼성";
  • 동적인 데이터는 객체를 만들면서 설정하며, 객체마다 각자 다르게 관리한다.

  • 일반 필드로 생성한다.

    	private String number;
    	private String color;
  • 생성자에서는 static 항목을 초기화하지 않는다.

    	public GalaxyFold4(String number, String color) {
    		//this.setCompany("삼성"); //비추천
    		this.setNumber(number);
    		this.setColor(color);
    	}
    
    	public void output() {
    		System.out.println("번호 : " + this.getNumber());
    		System.out.println("색상 : " + this.getColor());
    		//System.out.println("제조사 : " + this.getCompany()); //잘못된 방법
    		System.out.println("제조사 : " + GalaxyFold4.getCompany());
    		} //올바른 방법
ex) 메인클래스에서 회사를 수정 할 경우
		g1.setCompany("애플"); //잘못된 접근방법
		GalaxyFold4.setCompany("화웨이"); //올바른 접근방법
        

다른 예시)

  • static 항목(standardRate = 1.2; 자리)에 대한 초기화 코드를 작성할 수 있는 저장공간
    ex) : 1부터 100까지 더한 결과를 설정
    if, for문 등 각종 프로그래밍 구문 사용 가능

    private static double standardRate; //기본이율
    	static {
    		standardRate = 1.2;
    	}
    public static double getStandardRate() {
    	return standardRate;
    }
    public static void setStandardRate(double standardRate) {
    	if(standardRate < 0) {
    		return;
    	}
    	KhBank.standardRate = standardRate;
    }
  • static을 사용 했을 경우 예시)

    	public class Robot {
    		public static int plus(int left, int right) {
    			return left + right;
    		}
    	}
    
    	public class Test01 {
    		public static void main(String[] args) {
      			int a = Robot.plus(10, 20);
    			System.out.println("a = " + a);
    		}
    	}
  • static을 사용 하지 않았을 경우 예시)

    	public class Robot {
    		public int plus(int left, int right) {
    			return left + right;
    		}
    	}
    
    	public class Test01 {
    		public void main(String[] args) {
    			Robot rb = new Robot();
    			int a = rb.plus(10,20);
    		}
    	}

◆ 상수(Constant)

  • 언제난 변하지 않고 한결 같은 값을 가지는 변수이다.
  • 상수를 만들기 위해서 static과 final을 같이 사용한다.
  • 가독성을 높이도록 약속을 명문화 하는 기능이 있다.
  • 일반적으로 상수는 대문자로 작성함 (변수를 상수 처럼 사용하는 것이기 때문에)

코드 예시)

public class Test03 {
	static final int SCISSORS = 0;
	static final int ROCK = 1;
	static final int PAPER = 2;

	//목표 : static과 final을 같이 쓰는 이유
	//ex) 화면에 랜덤으로 가위/바위/보 중 하나가 출력
	public static void main(String[] args) {
		Random r = new Random();
		int rsp = r.nextInt(3);
		System.out.println("rsp : " + rsp);
	
	// case문 에서는 변수를 적을 수 없다. 
		switch (rsp) {
		case SCISSORS:
			System.out.println("가위");
			break;
		case ROCK:
			System.out.println("바위");
			break;
		case PAPER: // == default:
			System.out.println("보");
			break;
		}
	}
}

◆ 상속

  • 공통점을 추려서 클래스를 분류하는 기술이다.
  • 상위 클래스 (슈퍼 클래스, 부모 클래스, ...)
    객체 생성이 목적이 아니라 클래스들의 공통점을 보관하기 위한 클래스
  • 하위클래스 (서브클래스, 자식클래스, ...)
    extends라는 키워드를 클래스 옆에 붙어서 상위클래스를 설정 (상속 설정)
    해당 클래스의 모든 내용이 전부 다 상속된다. (private 메서드만 상속이 불가능하다.)
profile
Backend Developer

0개의 댓글