비즈니스 요구사항 정리 데이터 : 회원ID, 이름 기능 : 회원 등록, 조회 아직 데이터 저장소가 선정되지 않았다고 가정 일반적인 웹 어플리케이션 계층 구조 컨트롤러 웹 MVC의 컨트롤러 역할 서비스 핵심 비즈니스 로직 구현 리포지토리 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 비즈니스 도메인 객체 ex) 회원, 주문, 쿠폰 등 주로 데이터베이스에 저장하고 관리됨 클래스 의존관계 아직 데이터 저장소가 선정되지 않아 우선 인터페이스로 구현하여 추후 클래스를 변경할 수 있도록 설계 데이터 저장소는 RDB, NoSQL 등 다양한 저장소를 고민 중인 상황으로 가정 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용 회원 도메인과 리포지토리 만들기 ..
정적 컨텐츠 section1 때 welcome page처럼 어떠한 변형없이 파일을 그대로 전달 resources/static/hello-static.html 정적 컨텐츠 입니다. 서버 가동 후 localhost:8080/hello-static.html 접속하면 어떠한 변형 없이 화면 실행 동작 환경 그림 웹 브라우저가 localhost:8080/hello-static.html을 스프링 부트 내장 톰켓 서버에게 전달 톰켓 서버는 스프링 컨테이너에 hello-static 관련 controller가 있는 지 확인 관련 consroller가 없으면 resources/static 폴더에 hello-static 이름에 html 파일이 있는 지 확인 해당 html 파일을 웹 브라우저에게 전달 MVC와 템플릿 엔진 그..
사전 준비물 Java 11 설치 IDE : IntelliJ 또는 Eclipse 설치 저는 Java 19 버전, IntelliJ을 설치했습니다. 저는 윈도우입니다. 맥을 사용하시는 분들은 인프런 강의를 참고해주세요! 1. 프로젝트 생성 스프링 프로젝트 생성 스프링부트사이트 https://start.spring.io/ Project Maven, Gradle 필요한 라이브러리를 가져와서 관리하는 tool 요새는 Gradle을 많이 사용한다 Language Java 선택 Spring Boot Snapshot은 데모버전, M1 또한 정식 버전은 아님. 버전만 적혀있는 것 중 제일 최신 것으로 선택 Project Metadata Group : 기업 도메인명을 보통 기입 Artifact : 프로젝트명 Dependen..
참조 복제 new를 붙이는 데이터형은 참조 데이터형이며 그 외 char, int 등은 기본 데이터형이다. public class ReferenceDemo1 { public static void runValue(){ int a = 1; int b = a; b = 2; System.out.println("runValue, "+a); } public static void main(String[] args) { runValue(); } } // 실행 결과 runValue, 1 a라는 상자에다가 1을 넣고, b라는 상자는 a 상자 안에 있는 값으로 복제한다. b라는 상자에 값을 2로 다시 넣는다고 한들 a 상자 안에 값을 변하지 않는다. 참조 class A{ public int id; A(int id){ this..
예외 1 - 문법 오리엔테이션 예외 처리란 간단하게 말하자면 프로그램 개발 과정에서 발생하는 오류를 제어, 처리하는 것이다. 지금까지 배운 것이 성공하기 위한 지식이였다면 예외 처리는 실패하지 않기 위한 지식이라고 볼 수 있다. 예외란 무엇인가 오류라는 것은 예외의 일종이다. 예외란 개발자가 계획한 것 외에 일반적이지 않은 상황이 발생했을 경우를 뜻한다. 예외 상황을 처리, 관리하는 것 또한 예외 혹은 예외 처리라고 부른다. ex) 계산기 class Calculator{ int left, right; public void setOprands(int left, int right){ this.left = left; this.right = right; } public void divide(){ System.o..
1. 접근 제어자 자유와 규제 너무 자유로우면 소통에 어려움을 겪게 되기에 적정선의 규제가 필요하다. 접근 제어자, 추상 클래스, final, 인터페이스 등이 규제에 해당한다. 문법 접근 제어자 객체 안에 멤버들(변수, 메소드)을 사용할 때의 권한 // public이 접근 제어자 public String x(){ return "public"; } // private이 접근 제어자 private String y(){ return "private"; } 사용이유 보안이나 로직상의 이유로 사용자, 즉 외부에서 접근 규제하여 오작동 발생을 줄일 수 있기 때문이다. 세밀한 제어 public protected default private 동일 패키지 동일 클래스 O O O O 동일 패키지 상속 관계 O O O X ..
인프런 올인원 자바 스프링 강의를 학습 목적으로 정리하여 포스팅합니다. section7. 생애 최초 배포하기 1. EC2에 접속해 리눅스 명령어 다뤄보기 aws에서 ec2 연결하기를 눌러 접속하기 mkdir : 폴더를 만드는 명령어 ls : 현재 위치에서 폴더나 파일을 확인하는 명령어 cd : 폴더 안으로 들어가는 명령어 pwd : 현재 위치를 확인하는 명령어 rmdir : 비어 있는 폴더를 제거하는 명령어 2. 배포를 위한 프로그램 설치하기 ec2에 설치할 프로그램 코드를 가져오기 위한 git 우리가 만든 서버를 구동한 java 데이터베이스의 역할을 할 mysql sudo yum update sudo yum install git sudo yum install java-버전숫자-amazon-corrett..
overriding 부모 클래스가 가지고 있는 메소드를 자식 클래스가 재정의하여 사용하는 것 단, 아래의 조건은 부모 클래스와 자식 클래스가 동일해야한다. 메소드의 이름 메소드 매개변수의 숫자와 데이터 타입 그리고 순서 메소드의 리턴 타입 위와 같이 메소드의 형태를 정의하는 사항들을 통틀어 메소드의 서명(signature)라고 한다. 메소드의 서명을 지키려다보면 코드의 중복이 발생할 수 있다. 이럴 때는 super를 활용하면 해결할 수 있다. overloading 같은 메소드 이름이지만 매개변수의 타입이나 갯수를 변경하여 작성하는 것 overloading을 하는 경우 메소드의 기능이 비슷할 것이기에 코드 역시 중복이 발생하게 된다. this.메소드명(파라미터..)와 같이 this를 활용해주면 중복을 줄일..
유효범위 (scope) public class ScopeDemo{ static void a(){ int i = 0; } public static void main(String args[]){ for(int i = 0; i < 5; i++){ a(); System.out.println(i); } } } /* 실행 결과 0 1 2 3 4 */ 만약 유효범위 (scope)가 없다면 위 코드의 for문은 무한루프에 빠지게 된다. 아무리 for문에서 i++를 해줘도 a() 메소드로 인해 다시 0으로 초기화되기 때문이다. 하지만 위 코드가 정상적인 실행 결과를 보여주는 이유는 충돌이 발생하는 것을 해결하기 위해 고안된 유효범위 덕분이다. 비교를 위해 위 코드와 같은 동작을 하지만 충돌이 발생하는 코드는 아래와 같다..
객체 지향 프로그래밍 객체지향 프로그래밍 영어를 줄여서 OOP라고도 함 변수와 메소드로 그룹핑된 하나하나가 객체 ~> 재활용성 UP 내가 원하는 정보만 추출해내는 것 => 추상화 부품화 즉 객체로 나누는 것이 무조건 유용한 것을 아님 ex) 컴퓨터(부품화O) -> 핸드폰(부품화X) - 정보의 은닉화(캡슐화) : 내부 동작 방법을 케이스로(객체) 숨기고 사용 방법(메소드)만 노출 - 인터페이스 : 규격이 표준화돼있어 서로 연결 가능. 이러한 연결점이 인터페이스 클래스와 인스턴스 그리고 객체 클래스 = 설계도(붕어빵틀), 인스턴스 = 제품(붕어빵) 중복의 제거(재활용성 가독성 UP) 하려면 메소드 사용을 해야하고, 메소드를 사용하여 중복을 제거하는 것이 리팩토링(동일동작이지만 코드를 수정하여 효율UP) 인스..