TIL6 [생활코딩] [김영한의 스프링입문]

givemacdonalds·2023년 12월 3일
0

TIL

목록 보기
7/16
post-thumbnail

[생활코딩]

클래스 인스턴스 객체

클래스,인스턴스,객체 라는 말이 헷갈려서 확실하게 정리하려고 함.

들어가기에 앞서...

객체지향프로그래밍(OOP)

= 재활용 가능한 부품화
= 조립식 컴퓨터

1) 초기 Computer는 일체형

  • 고장나면 전부 고치거나 버려야함
  • 유지보수 하기 힘듦

2) 기능별로 나눈 Computer

  • 여러개의 컴포넌트로 구성되어 있어서 고장이 나면 그 해당 부품을 고치거나 바꾸면 됨
  • 유지보수 하기 좋음

그렇다면 나눈 것이 꼭 정답인가?

최근에 나온 맥미니 같은 것을 보면 핸드폰처럼 일체형으로 변함( 초기 컴퓨터로 회귀??) = 정답은 없고 각자 어떻게 사용하는가에 따라 다름

객체지향, 절차지향 또한 그러하다 각자 필요한 것에 맞춰서 사용하면 되는 것 같음

클래스 인스턴스

둘의 관계는 설계도와 제품이라고 볼 수 있음(완벽한 설명은 아님)
클래스(설계도)를 만들면 인스턴스(제품)에서 그 설계도를 활용해서 다양한 제품을 출시하는 모습이 비슷함

			[Class]
(Instance) (Instance) (Instance)

멤버

  • 구성원이라는 뜻의 멤버에는 클래스 멤버, 인스턴스 멤버가 존재함
  • 멤버:(변수,메소드) 가 들어있음

ex)

class Calculator {
	int left, right; //인스턴스 변수 선언
    static double PI = 3.14 // 클래스 변수
    
    public void setOprands(int left, int right){
    	this.left=left; //this.left : 전역 변수, left : 매개 변수
        this.right=right;
    }
    
    public void sum(){ //메소드
    	System.out.println(this.left+this.right);
    }
    public void avg(){
    	System.out.println(this.left+this.right/2);
    }
}
public class exampleCal{
	
    public static void main(String[] args){
    	
        Calculator c1 = new Calculator(); # c1이라는 인스턴스 생성
        c1.setOprands(10,20); # 인스턴수 변수(left,right) 지정
        c1.sum(); // 30
        c1.avg(); // 15
        
        Calculator c2 = new Calculator();
        c2.setOprands(30,40);
        c2.sum(); // 70
        c2.avg(); // 35
 	}
 }

같은 클래스(설계도)로 다른 인스턴스(제품) 값이 나옴

  • PI 같이 상수 같은 값은 클래스 변수로 지정(변수 선언시에 static 을 붙이면 됨

ex)

class Calculator01 {    
    public static void sum(int left, int right){  // 클래스 메소드
    	System.out.println(left+right);
    }
    public static void avg(int left, int right){
    	System.out.println(left+right/2);
    }
}

public class exampleCal02{
	
    public static void main(String[] args){
    	
        Calculator01.sum(10,20);
        Calculator01.avg(30,40);
 	}
 }
  • 클래스 메소드로 지정하게 되면 인스턴스로 설정하지 않고 클래스로 직접 호출 할 수 있음

  1. 인스턴스 메소드는 클래스 멤버에 접근 할 수 있음
  2. 클래스 메소드는 인스턴스 멤버에 접근 할 수 없음

1번의 경우 인스턴스의 상위가 클래스여서 접근 가능함
2번의 경우 클래스 상위는 없기 때문에 접근 불가능함


[스프링 입문]

회원 관리 예제

1. 비즈니스 요구사항 정리

  • 데이터 : 회원ID, 이름
  • 기능 : 회원등록, 조회
  • 아직 데이터 저장소가 선정되지 않음(인터페이스로 구현 클래스를 변경 할 수 있게 설계)

2. 회원 도메인

<src/main/java/hello/hellospring/domain/Member>

package hello.hellospring.domain;
 
public class Member {

    private Long id; //시스템이 저장하는 id
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  • getter and setter : 외부에서 데이터를 작성할때 규격화(?)하기 위해서 사용함

3. 회원 레포지토리 인터페이스

<src/main/java/hello/hellospring/repository/MemberRepository>

package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import java.util.List;
import java.util.Optional;

public interface MemberRepository {
    Member save(Member member);                 //회원이 저장소에 저장
    Optional<Member> findById(Long id);          //id랑 name을 찾아 올 수있음
    Optional<Member> findByName(String name);   //Optional: npe방지를 위해 사용
    List<Member> findAll();                     //지금까지 저장된 회원 리스트 모두를 반환

}

인터페이스

  • 대화의 원활화
  • 개발의 통일성과 교체 용이

ex)

HDMI 규격 통일 -> 서로 다른 본체여도 모니터를 바꿔서 사용할 수 있음

0개의 댓글