[LIKELION] 220928

고관운·2022년 9월 28일

회고

😄 느낀점

  • 예외처리 중요성 확인 (추후 코딩부터는 예외처리까지 고려해야할 듯)
  • static변수나 함수가 메모리적으로 상당히 중요함 (낭비가 생길 수 있기 때문에)

😁 목표

  • 과제 2개 완료하기 (삽입정렬, 다형성 활용)
  • 백준 코딩 연습

01. 자바-15-예외처리

예외처리

예외란

예외(Exception) : 정상적이지 않은 상황
Error : 시스템적으로 컨트롤할 수 없는 상황(Error 발생시 JVM이 프로그램 종료시킴)

예외처리 종류

  • try catch문
  • throws

try ~ catch

예외가 발생하지 않은 경우

try, finally문만 실행

예외가 발생한 경우

try문의 예외발생 지점 전까지 실행, 이후 catch, finally문 실행

catch

catch문은 여러개 사용 가능 (단, 괄호안의 객체 선언시 클래스명은 각각 다르게)

  • e.printStackTrace(); : 해당 에러 정보 출력
  • e.getMessage() : 간단하게 에러가 어디에서 발생했는지 알 수 있음(print문으로 출력)
  • Exception e : catch문의 괄호에 넣으면 모든 예외처리 가능

    🔴 catch문을 여러개 사용할 때 주의할 점

    • 순차적으로 예외처리할 수 있도록 괄호에 넣기
      (Exception을 처음 조건에 사용한다면 뒤의 catch문은 필요없기 때문에 에러)

finally

finally문은 예외 발생여부와 관계없이 마지막(try, catch문 이후)에 실행

throw

throw란

예외처리를 위한 문법으로 함수 바디부분 전에 사용 (throws IOException)

여러 개의 throw를 사용할 경우

throws ~, ~ (,로 여러개 적기)

Exception

Exception 종류

Checked : 반드시 개발자가 예외처리해줘야 함 (ex. IOException)
Unchecked : 예외처리 필수는 아님 (ex. RuntimeException)


02. 자바-17-클래스변수와메소드

Static

static이란

  • 객체를 생성하지 않고도 static 자원에 접근이 가능
  • 함수와 변수(인스턴스 변수)에 붙을 수 있음
  • 🔴 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미

static 변수 접근 방법

  • 클래스 내부에서 접근
  • 외부 인스턴스의 이름(객체)으로 접근
  • 외부 클래스의 이름으로 접근(ex. 클래스명.num++;)

Static 활용 예제

1.

class InstCnt {
	static int instNum = 0;
	
	InstCnt() {
		instNum++;
		System.out.println("인스턴스 생성: " + instNum);
	}
}

public class java_17_p6 {

	public static void main(String[] args) {
		InstCnt cnt1 = new InstCnt();
		InstCnt cnt2 = new InstCnt();
		InstCnt cnt3 = new InstCnt();
	}

}

🟢 객체 생성할때마다 instNum 1증가
🟢 단, instNum이 static변수가 아니였을 경우, 모든 객체는 instNum의 값을 1로 출력

2. 트럼프 카드

52장으로 무늬와 숫자가 모두 다름
(단, 가로세로 길이는 모두 동일)
52장을 배열 형태로 만들면 메모리 낭비
(가로 세로 길이는 static변수로 활용하여 하나의 메모리만 차지하도록)

주의할 상황

클래스 내부에서
1. 일반함수에 static 변수를 넣으면 문제없음
2. static함수에 일반변수를 넣으면 문제발생
이유 : 일반 변수는 객체가 생성되어야 메모리를 잡음, static함수는 객체 생성전에 메모리에 잡히기 때문에 메모리에 없는 일반변수 사용 불가 (static변수는 가능)

out

System.out.printlnout은 static으로 선언되어 있음
(static을 하지 않았다면 사용할때마다 new를 해서 객체를 생성해야 함)

main

main이 public, static인 이유

  • static : 제일 먼저 호출되는 메소드
  • public : 언제 어디서든 사용할 수 있도록

0개의 댓글