30. final 키워드
·
Java
final final은 값을 고정하는 키워드이다.final - 지역 변수최초 한번만 할당 가능하다. 할당 후 값을 변경할려고 하면 에러가 발생한다.final - 매개 변수인자로 들어온 값의 변경이 불가능하다. 변경 시도 시 에러가 발생한다.매개 변수가 메서드 내에서 변하지 않는다는 것을 명시하기 위해 final 을 붙이는 경우가 종종 있다.public class FinalLocalMain { public static void main(String[] args) { // final 지역변수 final int data1; data1 = 10; // 최초 한번만 할당 가능// data1 = 20; // 컴파일 오류 // final 지역변수2 ..
29. static
·
Java
static이란 static은 메서드 영역에 저장할 것을 지정하는 키워드이다. static을 사용하는 이유는 1)특정 클래스의 인스턴스들이 공통으로 사용할 것을 공유 2)인스턴스 생성 없이 특정 기능 사용을 위함이다.클래스 맴버변수(클래스명.클래스 맴버변수)static 키워드가 있는 맴버변수.프로그램 전 범위에서 공유된다.인스턴스 없이도 사용이 가능하다. 그 이유는 이미 JVM의 메서드 영역에 올라와 있기 때문이다.중복된 이름은 사용가능하다. 그 이유는 클래스 맴버변수는 클래스 소속이라 클래스마다 별도에 static 영역을 가지기 때문이다.클래스 메서드(클래스명.클래스 메서드)static 키워드가 있는 메서드. 프로그램 전 범위에서 공유된다.인스턴스 생성 없이 호출 가능. (이유는 static 변수와 동..
28. 접근 제어자
·
Java
1. 접근 제어자 정의와 필요 이유접근 제어자란 접근을 허용 및 거부할 수 있게 하는 키워드를 의미한다. 접근 제어자를 통해 외부에서 필드, 메서드, 클래스에 접근 하는 것을 제어 할 수 있다. 접근 제어자를 사용하는 이유는 캡슐화와 관련이 있으며 외부로부터 속성과 기능을 숨기고 필요한 부분만 노출하기 위해서이다. 자동차를 운전하는데 내가 자동차 엔진이 어떻게 돌아가는지 알 필요가 없는 것과 같다. 4가지 종류의 접근 제어자(제어가 강한 순에서 약한 순으로 정렬함)private: 같은 클래스 내에서만 접근 Odefault: 같은 패키지 내에서만 접근 Oprotected: 같은 패키지 내에서만 접근 O 추가로 다른 패키지이자만 상속 관계인 경우 호출 Opublic: 제한 없음필드와 메서드는 4가지 접근 ..
27. 생성자
·
Java
1. 생성자 정의와 필요 이유인스턴스를 생성하자마자 초기값을 넣어야 할 경우나 어떤 작업을 해야한다면 생성자는 초기값을 넣어주고 특정 작업 역시 수행해준다.과정을 간단히 말하자면 1) new 키워드로 힙에 인스턴스를 생성한다2) 생성자가 초기값을 세팅한다 OR 특정 작업 수행3) 주소값을 반환해 참조변수에 넣는다 생성자도 메서드다. 객체지향에선 데이터와 그 데이터를 다루는 메서드를 함께 묶어 클래스로 구성한다. 그 부분에서 생성자도 메서드이다. 다만 조금 특별한 메서드이다.기본 생성자는 자바가 자동으로 만들어주지만 개발자가 생성자를 직접 작성하면 기본 생성자는 자동으로 만들어지지 않는다.메서드 오버로딩에 의해 여러 생성자를 작성할 수 있다public class MemberInit { String n..
26. 절차지향 VS 객체지향
·
Java
1. 절차지향절차 지향은 말 그대로 절차 즉 순서를 중시하는 것이다. 이 방식은 프로그램의 흐름을 중시하고 how를 중심으로 프로그래밍한다.데이터와 데이터를 처리하는 메서드가 분리되어 있다데이터와 메서드가 분리되어 있어 수정 시 관리를 2곳에서 해야한다.아래 코드는 데이터와 메서드가 분리되어 있다. 그래서 코드를 수정할려면 MusucPlayerData와 메서드들 둘 다 수정해야한다./** * 메소드 추출 * 코드가 간결하긴 하나 데이터와 메서드가 분리되어 있다 */public class MusicPlayerMain3 { public static void main(String[] args) { MusicPlayerData data = new MusicPlayerData(); ..
25. 기본형과 참조형, 변수와 초기화 그리고 null
·
Java
1. 기본형과 참조형기본형(Primitive Type): Long, double, boolean 등과 같이 변수에 실제 값을 넣을 수 있는 데이터 타입이다.참조형(Reference Type): heap에 있는 객체(인스턴스)에 접근 하기 위한 주소값을 넣는 데이터 타입이다. 기본형은 바로 값을 사용할 수 있지만 참조형은 주소값을 통해 heap에 접근해야 한다.객체는 .(dot)연산자를 사용해 heap에 저장된 객체에 접근할 수 있다. ex) dog.eat() -> dog에 저장된 객체의 주소값-.(dot)-을 이용해 heap에 있는 eat()에 접근기본형과 참조형 변수 모두 변수에 있는 값을 복사하여 전달한다.2. 기본형과 참조형(메서드)메소드에 파라미터 전달은 기본형의 경우 파라미터에 어떤 연산을 하고..
Spring MVC 예외 처리
·
Spring/스프링 MVC
@ControllerAdvice컨트롤러에서 발생한 예외를 주어진 상황에 맞게 처리한다. 즉 예외처리를 맡김으로써 다른 곳에서는 예외처리 신경 안써도 된다. 이렇게 예외를 처리하는 곳을 전담시키는 이유는 예외처리 관련 기능을 모아두기 위함-역할 분담-이다. @ExceptionHandler특정 타입의 예외를 지정함으로써 특정 예외만 처리한다. 예외에도 종류가 많기 때문에 필요한 예외만 따로 처리하기 위해 존재한다. @ResponseStatusHTTP 응답 상태 코드를 지정하는 역할을 한다. 여기서는 특정 예외에 대한 응답 상태를 지정해 특정 페이지로 가도록 처리하고 있다. 이렇게 응답 상태를 표시하는 이유는 예외 발생 시 상태코드를 전달하기 위함이다.@Log4j2@ControllerAdvice // 컨트롤..
24. 스코프(scope)
·
Java
scope스코프란 영어로 범위를 의미하며 지역 변수의 입장에서는 자신의 생존 범위라고 할 수 있다. 아래의 코드를 보면 x는 if문 블럭 외부에서 호출할려고 하면 안된다. 그 이유는 if문 내에서 선언되어 생존범위가 if문 블럭으로 한정되었기 때문이다. for문 역시도 마찬가지로 for문 블럭으로 생존범위가 한정되어 있다.package scope;public class Scope1 { public static void main(String[] args) { int m = 10; // m 생존 시작 if (true) { int x = 20; // x 생존 시작 System.out.println("if m = " + m); ..
Model과 컨트롤러의 반환 타입 및 View 처리 방식
·
Spring
Model 파라미터model이란 view 단에 데이터를 보내기 위한 바구니와 같다. 바구니기에 바구니에 내가 보내고 싶은 데이터를 넣을 수 있다.넣는 방법은 model.addAttribute(Str key, Obj value)를 사용하여 넣을 수 있다. @GetMapping("/ex4") public void ex4(Model model) { // Model을 통해 뷰 단에 내가 원하는 데이터를 실어 보낼 수 있다. 데이터 형식은 이름, 값 의 형태이다. log.info("-----------------"); // 뷰 단에 전달할 것을 모델에 실음. 서블릿의 request.setAttribute()를 통해 데이터를 실은 것과 동일하다 model.addAttrib..
스프링 MVC의 파라미터 자동 수집 및 변환
·
Spring/스프링 MVC
1. 파라미터 자동 수집이란파라미터 자동수집이란 요청 데이터를 컨트롤러의 메소드 매개변수에 자동으로 바인딩 해주는 기능이다. 좀 더 풀어서 얘기하면 DTO나 VO 등을 메소드의 파라미터로 설정하면 자동으로 전달되는 HttpServletRequest의 파라미터(클라이언트로부터 온 요청 데이터)들을 자동으로 수집(바인딩)하는 기능이다. 문자열, 숫자, 배열, 리스트, 첨부 파일도 수집(바인딩) 가능하다. 기본 자료형의 경우 자동으로 형 변환처리가 가능하다객체 자료형의 경우 settter의 동작을 통해 처리된다객체 자료형의 경우 생성자가 없거나 파라미터가 없는 생성자가 필요하다 2. 단순 타입 매개변수 수집요청 파라미터의 이름과 컨트롤러 메서드의 매개변수 이름이 일치하면 자동으로 값이 바인딩된다.스프링 부트는..