스프링 프레임워크

 

자바 기반의 오픈소스 프레임워크

복잡한 기능을 구현하기 위해 만들어졌다.

 

대표적인  스프링 프로젝트

  • 스프링 부트 : 간편하게 스프링 프로젝트를 시작할 수 있도록 해주며, 마이크로 서비스 개발 및 애플리케이션 개발에 적합하다.
  • 스프링 데이터 : 데이터베이스 연동을 위한 개발을 지원한다.
  • 스프링 배치 : 대량의 데이터를 일괄 처리하기 위한 솔루션이다.
  • 스프링 시큐리티 : 보안과 관련되어 있다.
  • 스프링 HATEOAS : REST API에 대해 하이퍼 미디어 기반으로 서비스 정보를 제공하는 기능으로, API 구조 파악이나 테스트에 유용하다.

 

필자가 할 건 스프링 부트이다.

 


MVC

Model, View, Controller의 약자로, 웹 애플리케이션을 비즈니스 로직, 포레젠테이션로직, 데이터로 분리하는 디자인 패턴

 

  • Model : 비즈니스 로직 및 데이터 처리 담당
  • View : 모델이처리한 결과 데이터의 화면
  • Controller : 요청처리 및 흐름 제어 담당

 

 

 

 

컨트롤러 설정

// 컨트롤러 명시
@Controller
public class CalcController {
//	url 설정 : 8080/calcInput
	@RequestMapping(value = "/calcInput")
	public ModelAndView inputForm() {
//		ModelAndView 객체 생성
		ModelAndView mav = new ModelAndView();
//		뷰의 calcForm.html 실행
		mav.setViewName("calcForm");
		return mav;
	}
	@RequestMapping(value = "/calcControl")
	public ModelAndView hello2(HttpServletRequest request) {
		String sn1 = request.getParameter("num1");
		String sn2 = request.getParameter("num2");
		String op = request.getParameter("op");
		int n1 = Integer.parseInt(sn1);
		int n2 = Integer.parseInt(sn2);
		int result = 0;
		Calculator model = new Calculator();
		result = model.calc(n1, n2, op);
		ModelAndView mav = new ModelAndView();
//		뷰에 오브젝트를 myResult변수명으로 넘겨준다
		mav.addObject("myResult", result);
		mav.setViewName("calcResult");
		return mav;
	}
}

 

 

 

모델 설정

public class Calculator {
//	실제 업무 계산을 처리하는 모델
	public int calc(int n1, int n2, String operator) {
		int result = 0;
		switch(operator) {
		case "+":
			result = n1 + n2;
			break;
		case "-":
			result = n1 - n2;
			break;
		case "*":
			result = n1 * n2;
			break;
		case "/":
			result = n1 % n2;
			break;
		}
		return result;
	}
}

 

 

 

뷰 설정

 

 

-calcForm.hmtl-

<body>
	<h2>계산기 - 입력 뷰</h2>
	<hr>
	<form action="calcControl" method = "post">
		<input type="text" name="num1" size="10">
		<select name = "op">
			<option>+</option>
			<option>-</option>
			<option>*</option>
			<option>/</option>
		</select>
		<input type="text" name="num2" size="20">
		<input type="submit" value="실행">
	</form>
</body>

 

 

-calcResult.html-

<body>
	<h1>결과 보는 페이지</h1>
	<h1 th:text="'계산결과: ' + ${myResult} + '입니다!!' "></h1>
</body>

'JAVA > JAVA' 카테고리의 다른 글

[JAVA] 인터페이스  (0) 2023.12.22
[JAVA] this, super  (2) 2023.12.22
[JAVA] 추상 클래스  (0) 2023.12.22
[JAVA] 상속  (1) 2023.12.21
[JAVA] 접근 제한자  (0) 2023.12.20

인터페이스

 

코드 수행부가 없는  추상 메서드로 구성 된다.

오버라이딩을 통한 다양한 동작을 목적으로 한다.

인터페이스의 상속은 implements키워드이다.

  • 다형성 : 한 대상이 다양한 형태로 동작 또는 해석된다.
  • 유연성 : 다양한 요구사항을 수용하는 성질이다.

 

구현체 클래스는 인터페이스의 모든 추상 메서드를 반드시 재정의해야 한다.

 

interface Alarm{
//	
	public abstract void playMusic(String title);
//	public abstract 코드가 없어도 암묵적으로 적용된다.
	void beep();
}

class SmartPhone implements Alarm{
	
	private String phoneNumber;
	@Override
//	추상메서드는 반드시 오버라이딩을 해줘야한다.
	public void playMusic(String title) {
		// TODO Auto-generated method stub
		System.out.printf("[%s]이 재생됩니다..\n", title);
	}
	

	@Override
	public void beep() {
		// TODO Auto-generated method stub
		System.out.println("삐삐삐삐삐삐삐삐삐삐");
	}
	
}


public class AlarmTest {
	public static void main(String[] args) {
		Alarm a = new SmartPhone();
		a.playMusic("상어");
		a.beep();
	}
}

 

인터페이스는 다중 상속이 가능하다

 

interface Alarm{
//	
	public abstract void playMusic(String title);
	void beep();
}
interface Phone{
//	
	public abstract void call(String title);
	public abstract void receive();
}
interface Messenger{
//	
	void sendMsg(String phoneNum, String msg);
	void receiveMsg();
}
class SmartPhone implements Alarm, Phone, Messenger{
	
	private String phoneNumber;
	@Override
//	추상메서드는 반드시 오버라이딩을 해줘야한다.
	public void playMusic(String title) {
		// TODO Auto-generated method stub
		System.out.printf("[%s]이 재생됩니다..\n", title);
	}
	@Override
	public void beep() {
		// TODO Auto-generated method stub
		System.out.println("삐삐삐삐삐삐삐삐삐삐");
	}
	@Override
	public void sendMsg(String phoneNum, String msg) {
		// TODO Auto-generated method stub
		System.out.printf("[%s]로 메세지 전송: %s\n", phoneNum, msg);

	}
	@Override
	public void receiveMsg() {
		// TODO Auto-generated method stub
		 System.out.println("메세지가 도착하였습니다.");

		
	}
	@Override
	public void call(String phoneNum) {
		// TODO Auto-generated method stub
		  System.out.printf("[%s]로 전화를 겁니다..rrr\n", phoneNum);

	}
	@Override
	public void receive() {
		// TODO Auto-generated method stub
		 System.out.println("전화를 받습니다.");

	}
	
}


public class AlarmTest {
	public static void main(String[] args) {
		 SmartPhone sp = new SmartPhone ();
         sp.playMusic("상어송");
         sp.call("010-1234-5678");
         sp.sendMsg("010-1234-5678", "자니?");

	}
}

'JAVA > JAVA' 카테고리의 다른 글

[JAVA] Spring  (0) 2023.12.26
[JAVA] this, super  (2) 2023.12.22
[JAVA] 추상 클래스  (0) 2023.12.22
[JAVA] 상속  (1) 2023.12.21
[JAVA] 접근 제한자  (0) 2023.12.20

this

 

this는 참조 변수가 가리키는 객체를 가리킨다.

 

class Item{
	
	String name;
	int price;
	
	public Item(String name, int price) {
//		this는 Item객체의 인스턴스 변수를 가리킨다.
//		매개 변수로 입력받은 값을이랑 구분을 짓기 위해 사용.
		this.name = name;
		this.price = price;
	}
}

public class ItemTest {
//	참조 변수 i가 가리키는 객체는 Item객체이다.
	Item i = new Item("item", 1000);
}

 

 

생성자함수(변수)  <= 해당 생성자 함수를 호출한다.

 

	public Item(String name, int price) {
//		this는 Item객체의 인스턴스 변수를 가리킨다.
//		매개 변수로 입력받은 값을이랑 구분을 짓기 위해 사용.
		this.name = name;
		this.price = price;
	}
	public Item() {
    //  위에 생성자를 호출한다.
		this("다른 생성자 호출", 500);
	}

 

 

 

super

 

super는 this의 부모 영역을 가리킨다.

보통 상속 관계에서 자식 클래스에서 사용한다.

abstract class Item{
	String name;
	int price;
	public Item() {
		// TODO Auto-generated constructor stub
		this.name = "이름 없음";
		this.price = -1;
	}
	public Item(String name, int price) {
		super();
		this.name = name;
		this.price = price;
	}
	
}
class Weapon extends Item{
	int power;
	public Weapon() {
		// TODO Auto-generated constructor stub
		this.power = -1;
	}
	public Weapon(String name, int price, int power) {
    //부모 객체의 생성자를 호출
		super(name, price);
		this.power = power;
	}
	public void printInfo() {
    
    //부모 객체의 매개 변수 접근
		System.out.printf("[%s] 가격 : %d 골드, 공격력 : %d \n", super.name, super.price, this.power);
	}
}

public class ItemTest {
	public static void main(String[] args) {
		Weapon w1 = new Weapon("장검", 1200, 10);
		Weapon w2 = new Weapon();
		w1.printInfo();
		w2.printInfo();
	}
}

 

'JAVA > JAVA' 카테고리의 다른 글

[JAVA] Spring  (0) 2023.12.26
[JAVA] 인터페이스  (0) 2023.12.22
[JAVA] 추상 클래스  (0) 2023.12.22
[JAVA] 상속  (1) 2023.12.21
[JAVA] 접근 제한자  (0) 2023.12.20

추상 클래스

 

직접 객체를 생성할 수 없는 상속을 위해 정의된 개념적 클래스

abstract키워드를 통해 선언

추상 클래스를 활욜하면 잘못된 객체생성을 예방할 수 있음

 

※ 추상 클래스는 상속을 위해 필요할 뿐 독립 객체로 존재할 필요가 없다!!!  (new 연산자로 호출 불가)※

 

abstract class Animal{
	String name;
	public void  cry() {
		
	}
}
class Tiger extends Animal{
	@Override
	public void cry() {
		// TODO Auto-generated method stub
		System.out.println(name + " 어흥!~!~!");
	}
}
class Lion extends Animal{
	@Override
	public void cry() {
		// TODO Auto-generated method stub
		System.out.println("야옹~!~!~");
	}
}

public class AnimalTest{
	public static void main(String[] args) {
//			업캐스팅
			Animal t = new Tiger();
			t.name ="호랑이";
			t.cry();
			Animal l = new Lion();
			l.name = "사자";
			l.cry();
	}
}

'JAVA > JAVA' 카테고리의 다른 글

[JAVA] 인터페이스  (0) 2023.12.22
[JAVA] this, super  (2) 2023.12.22
[JAVA] 상속  (1) 2023.12.21
[JAVA] 접근 제한자  (0) 2023.12.20
[JAVA] static  (0) 2023.12.20

상속

 

기존 클래스를 확장하는 개념으로 부모 클래스를 자식 클래스가 물려받는다.

 

-활용-

  • 코드 중복 방지
  • 클래스의 확장을 가능케 한다.
  • 부모 클래스의 변경사항을 모든 자식 클래스에 반영시킬 수 있다.
  • extends 부모 클래스 형태로 상속을 한다

 

public class A {
//	부모 클래스
	int width = 1;
	void triangle() {
		System.out.println("triangle");
	}
}

 

 

public class B extends A{
// extends를 사용해서 상속을 한다
//	자식 클래스
	int rectangle;
	void info() {
//		부모 클래스의 width값을 가져올 수 있다.
		System.out.println(width);
		
	}
}

 

 

상속을 통한 간단한 예제

 

 

 

 

 

//부모 객체
public class Novice {
	private String name;
	private int hp;
	private int speed;
	
	public Novice() {
		// TODO Auto-generated constructor stub
	}
	public Novice(String name, int hp) {
		super();
		this.name = name;
		this.hp = hp;
	}
	public void punch(Knight n) {
		// TODO Auto-generated method stub
		
	}
	public void move() {
		System.out.println(speed + "만큼 이동");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHp() {
		return hp;
	}
	public void setHp(int hp) {
		this.hp = hp;
	}
	public int getSpeed() {
		return speed;
	}
	public void setSpeed(int speed) {
		this.speed = speed;
	}
	
}

 

//자식 객체
public class Wizard extends Novice{
	private int mp;
	
	public Wizard() {
		// TODO Auto-generated constructor stub
	}
	public Wizard(String name, int hp, int mp, int speed) {
		super.setHp(hp);
		super.setName(name);
		super.setSpeed(speed);
		this.mp = mp;
	}
	@Override
	public void punch(Knight n) {
		// TODO Auto-generated method stub
		System.out.println("마법사의 주먹으로 치기");
		n.setHp(n.getHp() - 1);
		
	}
	public void fireball(Knight n) {
		System.out.println("파이어볼~~~");
		n.setHp(n.getHp() - 5);
		this.mp -= 5;
	}
	public int getMp() {
		return mp;
	}
	public void setMp(int mp) {
		this.mp = mp;
	}
	
	
	
}

 

 

//자식 객체
public class Knight extends Novice{
	private int stamina;
	
	public Knight() {
		// TODO Auto-generated constructor stub
	}
	public Knight(String name, int hp,int stamina, int speed) {
		super.setHp(hp);
		super.setName(name);
		super.setSpeed(speed);
		this.stamina = stamina;
	}
	public void punch(Wizard w) {
		// TODO Auto-generated method stub
		System.out.println("기사의 주먹으로 치기");
		w.setHp(w.getHp() - 1);
		
	}
	public void slash(Wizard w) {
		System.out.println("베기~~~");
		w.setHp(w.getHp() - 5);
		this.stamina -= 10;
	}
	public int getStamina() {
		return stamina;
	}
	public void setStamina(int stamina) {
		this.stamina = stamina;
	}
}

 


 

상속 관계에서 자식 객체가 만들어지려면 부모 영역이 먼저 완성되어야 한다.

자식의 생성자 함수에서 super()키워드가 없어도 자동 삽입으로 부모 클래스의 생성자 함수가 호출된다.

  • super를 통해 매개변수를 넘겨줄 수 가 있다 혹은 오버로딩을 해줘야 한다.

 

class Parent{
	int width;
	public Parent() {
		System.out.println("부모 생성자 먼저 호출!!!");
	}
	public Parent(String text) {
		System.out.println("부모의 매개변수 호출 : " + text);
	}
}
class Child extends Parent{
	public Child() {
		super("hello");  //super를 매개변수를 넘겨줘서 부모의 해당하는 생성자가 호출된다. 없으면 기본 생성자 호출
		System.out.println("자식 생성자 호출!!!");
	}
}

public class Inheritance {
	public static void main(String[] args) {
		Child child = new Child();
		
	}
}

 

 

 

'JAVA > JAVA' 카테고리의 다른 글

[JAVA] this, super  (2) 2023.12.22
[JAVA] 추상 클래스  (0) 2023.12.22
[JAVA] 접근 제한자  (0) 2023.12.20
[JAVA] static  (0) 2023.12.20
[JAVA] 객체 지향 프로그래밍  (0) 2023.12.19

접근 제한자

 

접근 제한자란 외부 접근을 제어하는 키워드

대상에 따라 정보를 감추거나 공개하기 위해 사용

 

 

 

 

private과 public

 

private 선언된 필드는 클래스 내부에서만 사용가능

외부에서 사용하려면 getter메서드를 통해 접근해야한다

외부에서 private 필드를 변경하고 싶을 땐 setter 메서드를 사용

 

 

private int balance;
private String pw;
private String ssn;

public int getBalance() {
    return balance;
}
public void setBalance(int balance) {
    this.balance = balance;
}
public String getPw() {
    return pw;
}
public void setPw(String pw) {
    this.pw = pw;
}
public String getSsn() {
    return ssn;
}
public void setSsn(String ssn) {
    this.ssn = ssn;
}

 

 

public class EncapsulationTest {
	public static void main(String[] args) {
		Account a1 = new Account();
//		int형의 벗어나는 범위는 정수의 뒤에 l(L)을 붙혀준다.
		a1.setBalance(1000000000000l);
		a1.setPw("1111");
		a1.setSsn("950316");
		a1.deposit(5000);
		a1.withdraw(10000, "1111");
		System.out.println(a1.getBalance());
	}
}

'JAVA > JAVA' 카테고리의 다른 글

[JAVA] 추상 클래스  (0) 2023.12.22
[JAVA] 상속  (1) 2023.12.21
[JAVA] static  (0) 2023.12.20
[JAVA] 객체 지향 프로그래밍  (0) 2023.12.19
[JAVA] 배열  (0) 2023.12.19

static

 

static은 공유의 개념을 지닌 키워드

변수에 사용되면 클래스 변수, 메서드에 쓰이면 클래스 메서드라고한다.

프로그램이 런타임전인 클래스를 불러오는 시점에 만들어진다

 

class Student{
//	전역 설정시 모든 Student 객체가 공유
//	런타임전에 초기화
	static int count = 0;
//	인스턴스 변수는 각 객체가 소유한다.
//	객체가 만들어지면서 초기화
	int id;
	String name;
}



public class StaticTest {
	public static void main(String[] args) {
		Student s1 = new Student();
		Student s2 = new Student();
        //클래스명 자체로도 접근 가능
		Student.count = 1;
		System.out.println(s1.count);
		System.out.println(s2.count);
        System.out.println(Student.count);
	}
}

 

 

클래스변수와 인스턴스변수가 만들어지는 공간은 다르다.

'JAVA > JAVA' 카테고리의 다른 글

[JAVA] 상속  (1) 2023.12.21
[JAVA] 접근 제한자  (0) 2023.12.20
[JAVA] 객체 지향 프로그래밍  (0) 2023.12.19
[JAVA] 배열  (0) 2023.12.19
[JAVA] 메소드  (0) 2023.12.19

객체 지향 프로그래밍

 

프로그램을 조립하여 만드는 방식

프로그램을 부분별로 만든 뒤 전체를 구성하는 형식

 

 

 

 

클래스를 토대로 객체를 만드는 과정을 인스턴화(실체)라고 함

이러한 이유로 객체를 인스턴스라고 부르기도 함

 

public class Cat {
//	Cat이란 설계도 안에 속성(attribute)을 정의

//  인스턴스 변수
	String name;
	String breeds;
	double weight;
	
// 메서드
	public void wag() {
		System.out.println("왈왈");
	}

	public void bark() {
		System.out.println("야옹");
	}
//	메서드 오버로딩 : 이름이 같은 메서드를 입력변수를 다르게해서 구분
	public void bark(int times) {
		System.out.println(times + "번 짖기");
	}
}

 

 

객체 생성하기

- new 키워드와 함께 클래스명과 소괄호를 적어 생성

 

public class ObjectTest01 {
	public static void main(String[] args) {
		 Cat c = new Cat();
		 System.out.println("Cat 클래스를 메모리에 저장" + c);
		 System.out.println(c.name);
		 System.out.println(c.breeds);
		 System.out.println(c.weight);
		 
		 c.name = "크림";
		 c.breeds = "비숑";
		 c.weight = 4;
		 
		 System.out.println(c.name);
		 System.out.println(c.breeds);
		 System.out.println(c.weight);
		 
		 
		 }
}

 

 

생성자

클래스로부터 객체를 만드는 특별한 메서드

보통 해당 클래스의 인스턴스 변수의 초기화를 하기위해 사용(생성자 오버로딩을 통해서 초기화)

반환값이 객체의 주소를 반환하므로 타입 자체를 적지 않는다.

자동으로 주소를 반환해서 return을 적지 않는다.

생성자는 저장하면서 자동적으로 생성을 해준다.(.class파일에 저장)

 

public Cat() {
		// TODO Auto-generated constructor stub
}
	
// 생성자 오버로딩
public Cat(String name, String breeds, double weight) {
    super();
    this.name = name;
    this.breeds = breeds;
    this.weight = weight;
}

 

'JAVA > JAVA' 카테고리의 다른 글

[JAVA] 상속  (1) 2023.12.21
[JAVA] 접근 제한자  (0) 2023.12.20
[JAVA] static  (0) 2023.12.20
[JAVA] 배열  (0) 2023.12.19
[JAVA] 메소드  (0) 2023.12.19

+ Recent posts