게시글
블로그
전체 4
2021. 03. 11.
0
김영한 스프링 입문 정리 - 3강
Welcome page 설정하기 src > main > resources > static > index.html static 밑에 index.html로 페이지를 만들어두고 localhost:8080을 입력하고 들어오면 Welcome page로 설정된다. 간단한 웹 페이지 예제 hello.hellospring 밑에 controller 패키지를 하나 만든다. 그리고 controller 패키지에 HelloController 클래스를 하나 만들어준다. @GetMapping() 어노테이션은 GET과 POST 방식 중 어느 것으로 매핑할 것인지를 지정해 준다. URL에 localhost:8080/hello를 통해서 접속하면 model에 키가 "data"가 되고 값이 "hello!!" 가 담긴 상태로 hello.html로 이동한다. 리턴 값인 hello를 ViewResolver가 src > main > resources > templates에서 hello.html을 찾아서 화면을 보여준다. ${data} 에서 data가 HelloController에서 model에 담긴 키값에 대응되어 치환된다. 그러므로 안녕하세요 hello!!로 화면이 출력된다.

2021. 03. 04.
1
김영한 스프링 입문 정리 - 2강
Gradle은 의존관계가 있는 라이브러리를 함께 다운로드한다. spring-boot-start-web의 안에는 톰캣과 스프링 웹 MVC가 포함되어 있다. - spring-boot-starter-tomcat - spring-webmvc spring-boot-starter의 안에는 스프링 부트 + 스프링 코어 + 로깅이 모두 포함되어 있다. - spring-boot spring-core - spring-boot-starter-logging logback slf4j 로깅은 요즘은 logback, slf4j가 표준에 가깝다. 테스트 라이브러리는 junit 5버전을 많이 쓰는 추세이다.

2021. 03. 03.
1
김영한 스프링 입문 정리 - 1강
사전 준비 강의를 문제없이 진행하려면 JDK 11버전을 설치해야 한다. 인텔리제이 무료 버전(커뮤니티)을 설치한다. 스프링 부트 스타터 사이트: https://start.spring.io 즐겨찾기를 해두면 편하다. 스프링 부트 스타터 사이트 설정 Project: Gradle - 프로젝트는 과거에는 메이븐을 주로 사용했으나 요즘은 그레이들 프로젝트를 많이 사용한다. 메이븐과 그레이들은 필요한 라이브러리들을 땡겨오고 빌드의 라이프 사이클을 관리해주는 빌드 관리 도구이다. Spring Boot: 2.3.x - SNAPSHOT은 아직 만들고 있는 버전이다. 2021-03-03 기준으로 2.3.9를 선택하면 된다. Group: hello - 주로 기업의 도메인명을 적어주지만 학습할 땐 상관없으므로 hello로 진행한다. Artifact: hello-spring - 빌드 되었을 때의 결과물로 보면 된다. (프로젝트명) 학습할 땐 hello-spring으로 진행한다. Dependencies 1. Spring Web 2. Thymeleaf - 회사마다 사용하는 탬플릿이 다르지만 여기서는 Thymeleaf를 사용한다. - HTML을 만들어주는 탬플릿 엔진이다. 이렇게 설정해 주고 GENERATE를 누르면 프로젝트가 생성된다. 그다음 생성된 hello-spring.zip 파일을 압축 해제해 준다. 인텔리제이 인텔리제이를 실행하고 Open or Import를 눌러준다. 압축 해제된 hello-spring 폴더에서 build.gradle을 열어준다. Open as Project를 선택해 주면 준비가 끝난다. 인텔리제이 설정에서 Gradle을 검색하고 Build and run using과 Run tests using을 인텔리제이로 변경해 준다. - Gradle을 통해서 run을 하면 속도가 느릴 때가 있는데, 이렇게 설정해 주면 인텔리제이로 바로 run 하므로 속도가 빨라진다. SpringApplication을 run해주고 브라우저에 localhost:8080을 입력해주면 서버에 접속이 되는데, Whitelabel Error Page라고 나온다면 정상적으로 접속된 것이다. Could not target platform: 'Java SE 11' using tool chain: 'JDK 8 (1.8)'. 에러가 뜬다면 인텔리제이의 Settings에서 Gradle에 보면 Gradle JVM이 JAVA 11인지 확인해주면 된다. - JDK가 다른 버전인 경우, 자바 환경설정을 JDK11로 변경하고 인텔리제이를 껏다키면 된다. 만약 아래와 같은 오류가 뜬다면 아래 해결 방법을 참고한다. 오류 메시지: Execution failed for task ':HelloSpringApplication.main()'. > Process 'command 'C:/Program Files/Java/jdk-11.0.8/bin/java.exe'' finished with non-zero exit value 1 * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. 해결 방법: src 밑에 main 디렉터리에서 resources에 들어간다. application.properties를 열어서 server.port=8088를 입력하고 저장한다. 앞으로 브라우저로 접속할 때 localhost:8088로 접속하면 된다.

2021. 02. 08.
2
JAVA 객체지향 정리
클래스 클래스는 객체와 관련된 데이터와 처리 동작을 한데 모은 객체의 설계도라고 할 수 있다. 필드 = 멤버 변수 = 데이터는 모두 같은 말이다. 메서드 = 동작은 같은 말이다. 필드와 메서드를 클래스의 멤버라고 한다. 클래스가 실체화된 것을 객체(Object)라고 한다. 클래스를 실체화하기 위해서 JAVA에서는 new라는 키워드를 사용한다. Example) Book myBook = new Book(); book이라는 클래스가 new라는 키워드를 통해 실체화되어 myBook이라는 이름의 객체가 생성된다. 패키지 A 패키지에 Circle 클래스가 있고, B 패키지에도 Circle 클래스가 있을 때, 둘 다 동일한 Circle이라는 클래스명을 가지고 있더라도 패키지만 서로 다르다면 문제없이 사용할 수 있다. 오버 로딩 하나의 클래스에서 동일한 이름의 메서드를 여러 개 정의하는 것이다. Example 1) 반환 타입이 다르면 오버 로딩이 가능하다. int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } Example 2) 인수의 개수가 다르면 오버 로딩이 가능하다. int add(int a, int b) { return a + b; } int add(int a, int b, int c) { return a + b + c; } 생성자 1. 객체 생성과 함께 자동적으로 호출되는 특수한 메서드이다. 2. 개발자가 생성자를 따로 정의하지 않으면 인수가 없는 디폴트 생성자가 자동으로 만들어진다. 생성자를 사용하는 이유) 이유 1: 객체 생성시 초기화 작업 이유 2: 객체 생성시 필수 입력값을 강제하기 필드 스태틱 static 변수는 프로그램 실행전에 로드된다. 같은 클래스에서 생성된 오브젝트들은 static을 붙인 필드의 값을 서로 공유한다. public class StaticExample01 { static class A { //필드의 스태틱은 static int num; } public static void main(String[] args) { A a1 = new A(); A a2 = new A(); //같은 클래스에서 생성된 오브젝트들은 static 을 붙인 필드의 값을 공유한다. a1.num = 50; a2.num = 10; //결과: a1 = 10/a2 = 10 System.out.println("a1 = " + a1.num + "/a2 = " + a2.num); } } 추상 클래스 처리 내용을 기술하지 않고 정의만 되어있는 메서드를 추상 메서드라고 한다. Example) abstract void cry(); 추상 메서드를 한 개라도 가지고 있는 클래스를 추상 클래스라고 한다. Example) abstract class Animal { String name; abstract void cry(); void move() { . . . } } 여기서 Animal 클래스는 추상 메서드인 cry()가 존재하기 때문에 추상 클래스가 된다. 추상 클래스를 상속받는 클래스는 추상 메서드를 반드시 오버라이딩(재정의)해서 구현해야 한다. Example) abstract class Animal { int age; abstract void cry(); } class Dog extends Animal { @Override void cry() { System.out.println("멍멍"); } } class Cat extends Animal { @Override void cry() { System.out.println("야옹"); } } Dog와 Cat 클래스는 추상 클래스인 Animal을 상속받기 때문에 반드시 Animal의 추상 메서드인 cry()를 오버라이딩해서 구현해야 한다. 추상 클래스는 new 키워드로 실체화할 수 없다. Example) Animal animal = new Animal(); → Animal은 추상 클래스이므로 new 키워드로 실체화가 불가능하다. 인터페이스 인터페이스를 구현하기 위해서는 implements 키워드를 사용한다. 정의와 추상 메서드만이 인터페이스의 멤버가 될 수 있다. 인터페이스의 추상 메서드는 public 키워드가 붙는다. 어떤 패키지에서 인터페이스가 구현되어 사용될지 모르기 때문이다. Example) interface A { public static final int a = 2; public abstract void say(); } class B implements A { public void say() { System.out.println("Hello"); } } 다음과 같이 수식자를 생략할 수도 있다. interface A { int a = 2; void say(); } A 인터페이스에서 int a = 2는 public static int a = 2와 같고, void say()는 public abstract void say()와 같다. 수식자가 생략된 것이다.




