본문 바로가기

컴퓨터공부/Java

[java 자바공부]하이버네이트란, 기본형 매개변수와 참조형 매개변수, static 메소드와 인스턴스 메소드, 오버로딩 , 생성자

by Life & study 2023. 11. 1.
반응형

[java 자바공부]하이버네이트란, 기본형 매개변수와 참조형 매개변수,  static 메소드와 인스턴스 메소드, 오버로딩 , 생성자

 

 

[java 자바공부] 하이버네이트란?

 

하이버네이트(Hibernate)는 자바 기반의 ORM(Object-Relational Mapping) 프레임워크입니다. ORM은 객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형 시스템 간에 데이터를 변환하는 프로그래밍 기법입니다. 즉, 하이버네이트는 자바의 객체와 데이터베이스의 테이블 사이의 매핑을 책임집니다.

 

하이버네이트를 사용하면 SQL 쿼리를 직접 작성하지 않고, 객체 지향적인 방법으로 데이터베이스 작업을 수행할 수 있습니다. 또한 하이버네이트는 다양한 데이터베이스에 대한 SQL 을 자동으로 생성해주어, 데이터베이스에 독립적인 코드를 작성할 수 있게 해줍니다.

스프링 부트에서는 Spring Data JPA를 통해 하이버네이트를 쉽게 사용할 수 있습니다. 

Spring Data JPA는 JPA를 좀 더 편리하게 사용할 수 있도록 도와주는 스프링 프레임워크의 일부입니다.

스프링 부트에서 하이버네이트를 사용하는 방법은 다음과 같습니다.

의존성 추가: 스프링 부트 프로젝트의 build.gradle 또는 pom.xml 파일에 Spring Data JPA와 데이터베이스 드라이버의 의존성을 추가합니다.
Entity 클래스 생성: @Entity 어노테이션을 사용하여 엔티티 클래스를 생성합니다. 이 클래스는 데이터베이스의 테이블과 매핑됩니다.

 

java
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    // getter, setter ...
}

 


Repository 인터페이스 생성: Spring Data JPA에서 제공하는 JpaRepository 인터페이스를 상속받는 Repository 인터페이스를 생성합니다. 이 인터페이스를 통해 CRUD 연산 등을 수행할 수 있습니다.

 

java
public interface UserRepository extends JpaRepository<User, Long> {
}

 

개발자는 객체 지향 언어로 데이터베이스 데이터를 조작하는 코드를 작성하고, 하이버네이트는 이를 SQL 쿼리로 변환하여 데이터베이스에 전송합니다. 이때 SQL 쿼리는 Dialect를 통해 해당 데이터베이스에 맞게 변환됩니다. 이렇게 하이버네이트를 사용하면 개발자는 데이터베이스에 종속적인 코드를 작성하지 않아도 됩니다. 이는 개발의 생산성을 높이고 코드의 유지 관리를 쉽게 하며, 데이터베이스를 변경해야 할 경우에도 코드를 거의 변경할 필요가 없습니다.

 

 

[java 자바공부] 기본형 매개변수와 참조형 매개변수

 

기본형 매개변수 

 

int x = 10;
int y = x;
y = 20;
System.out.println(x);  // 10

 

참조형 매개변수

 

int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;
arr2[0] = 10;
System.out.println(arr1[0]);  // 10

 

결론, 

기본형 매개변수는

값을 읽기만 가능하다.

 

참조형으로 바꾼다면

파라미터로 값을 바꿀수잇다.

 

참조형 리모콘을준다

 

 

 

 

 

[java 자바공부] static 메소드와 ㅣ인스턴스 메소드

 

 

static 메소드는 
객체생성을 안하고 호출이 가능하다.


static의 2가지

static 메소드는 
객체생성을 안하고 호출이 가능하다.


static의 2가지

1.
인스턴스를 만들어서

마지막에 리턴으로 
값을 하나의 클래스에 리턴한다.


2. 인스턴스(리모콘)을 만들어서
파라미터로 인스턴스값을 만들어서
그값을  리턴한다

 



static

공통속성에 static을 붙인다

static이란

1.공통 맴버 변수 할때 쓰인다.
2.필드값을 안쓰고, 파라미터로 필드값을 만들어서
객체생성없이 쓴다.
3. 메서드란 명령문 집합이다?

 

정리 코드

class Alphabet {
    char ch;  // 인스턴스 변수 (IV)

    void setCh(char c) {  // 인스턴스 메소드 (IM)
        ch = c;
    }

    char getCh() {  // 인스턴스 메소드 (IM)
        return ch;
    }
}

public class Main {
    public static void main(String[] args) {
        Alphabet alphabetA = new Alphabet();  // 'Alphabet' 클래스의 인스턴스 생성
        Alphabet alphabetB = new Alphabet();  // 'Alphabet' 클래스의 인스턴스 생성

        alphabetA.setCh('A');  // 인스턴스 메소드 호출
        alphabetB.setCh('B');  // 인스턴스 메소드 호출

        System.out.println(alphabetA.getCh());  // 출력: A
        System.out.println(alphabetB.getCh());  // 출력: B
    }
}

 

 

 

 

정리표

 

Alphabet 은 클래스이다
 Alphabet alphabetA

Alphabet 의 인스턴스 객체
alphabetA 이다.

alphabetA.setCh(클래스)의 값중에 'A'을 호출한것이다.


 Alphabet alphabetA = new Alphabet();  // 'Alphabet' 클래스의 인스턴스 생성
        Alphabet alphabetB = new Alphabet();  // 'Alphabet' 클래스의 인스턴스 생성

        alphabetA.setCh('A');  // 인스턴스 메소드 호출
        alphabetB.setCh('B');  // 인스턴스 메소드 호출

        System.out.println(alphabetA.getCh());  // 출력: A
        System.out.println(alphabetB.getCh());  // 출력: B
    }
   
static 정리

(1)
 
satic int cv; 라고 하면 클래스 변수가 되어




클래스에 static int cv; 변수를 사용할수있다.

static 정리

(2)
 
 
클래스안에
class안에 static void staticMethod2() {} 라고 해서 필드를 사용할려고하면
사용을 못하고,

static void staticMethod2() {
}
는 
참조형 매개변수 (리모콘) 을 파라미터로 가져와서   

{ 리모콘안에 새로운 값변경 

d.x = 1000;
} 으로 변경해서

d.x 값을 1000; 으로 변경이 가능하게 해준다.

static 정리

(3)
satic 메소드는 iv 를 사용하지않는다.
iv 란 인스턴스 벨류 인데

필드를 사용하지않는다와 같다.

static 정리

(4)
static 끼리는 static 을 호출할수있다.

static은 왜 인스턴스 멤버를 사용할수없나요?

항상 호출이 가능하기 때문

   
   



 

 

 

 

 

[java 자바공부] 오버로딩

 

오버로딩(Overloading)은 프로그래밍에서 특정 기능을 수행하는 두 개 이상의 메서드나 함수를 같은 이름으로 선언하는 것을 말합니다. 이들은 매개변수의 타입, 개수, 순서 등이 다르게 선언됩니다. 이를 통해 같은 이름의 메서드나 함수를 여러 가지 방식으로 사용할 수 있어 코드의 가독성을 높이고 효율성을 증가시킵니다.

예를 들어, Java에서 add라는 메서드를 오버로딩하는 예시는 다음과 같습니다.

java
public class OverloadingExample {
    void add(int a, int b) {
        System.out.println("두 정수의 합: " + (a + b));
    }

    void add(double a, double b) {
        System.out.println("두 실수의 합: " + (a + b));
    }

    void add(String a, String b) {
        System.out.println("두 문자열의 합: " + (a + b));
    }
}


이 경우, add라는 메서드는 같은 이름을 가지고 있지만 각각 두 개의 정수, 두 개의 실수, 두 개의 문자열을 매개변수로 받습니다. 따라서 이 메서드는 매개변수의 타입에 따라 다르게 작동합니다.

java
public class Main {
    public static void main(String[] args) {
        OverloadingExample obj = new OverloadingExample();
        obj.add(10, 20);       // "두 정수의 합: 30" 출력
        obj.add(10.5, 20.5);   // "두 실수의 합: 31.0" 출력
        obj.add("Hello", " World");  // "두 문자열의 합: Hello World" 출력
    }
}


메인 메서드에서는 add 메서드를 세 가지 방식으로 호출하고 있습니다. 매개변수의 타입에 따라 적절한 add 메서드가 호출되어 각각 다른 동작을 수행하게 됩니다. 이처럼 오버로딩을 통해 같은 이름의 메서드를 여러 가지 방식으로 활용할 수 있습니다.

 

 

 

[java 자바공부] 생성자

 

생성자

1.리턴값이 없다
2.클래스와 이름이 같다.
3.모든 클래스는 생성자가 있어야된다.

Card c = new Card(); 
      이부분은 생성자 호출이다.

 

 

자바에서 초기화는 변수나 객체가 처음으로 값을 할당받는 것을 의미합니다. 이는 변수나 객체가 메모리 상에 생성될 때 이들이 가지게 될 기본값을 결정하는 과정입니다.

자바에서 new 키워드는 객체를 생성하고 초기화하는데 사용됩니다. new를 사용하면 클래스의 새로운 인스턴스가 생성되고, 해당 인스턴스의 참조가 반환됩니다. 이때 생성된 객체는 해당 클래스의 디폴트 생성자에 의해 초기화됩니다.

예를 들어, abc = new AbcClass();라는 문장은 AbcClass라는 클래스의 새로운 인스턴스를 생성하고, 이 인스턴스의 참조를 abc라는 변수에 할당하는 것을 의미합니다.

java
public class AbcClass {
    int num;

    public AbcClass() {  // 디폴트 생성자
        num = 10;  // 인스턴스 변수 num을 10으로 초기화
    }
}

public class Main {
    public static void main(String[] args) {
        AbcClass abc = new AbcClass();  // AbcClass의 인스턴스를 생성하고 초기화
        System.out.println(abc.num);  // "10" 출력
    }
}


위의 코드에서 AbcClass abc = new AbcClass();라는 문장은 AbcClass의 새로운 인스턴스를 생성하고, 이 인스턴스를 초기화하여 abc에 할당하는 것을 의미합니다. 이때 AbcClass의 디폴트 생성자에 의해 num이 10으로 초기화됩니다.

 

 

 

 

 

[java 자바공부] 생성자

 

생성자(1)


생성자의 호출은 첫번째 줄만 가능하다.



같은생성자호출은 
this(color, "auto", 4);
라고 써야된다.





생성자(2)



같은생성자호출은 
this(color, "auto", 4);
라고 써야된다.
생성자 (3)

(왼쪽,오른쪽)

\규칙
1.메서드(0 생성자)

2.지역변수와 인스턴스 변수를 구별할때 쓴다.

lv는 매개변수다

 
왼쪽은 나쁜 코드이다.
오른쪽이 굿 코드이다.


생성자 (4)

객체와 
인스턴스 메소드의
차이점을
알기


클래스란?

클래스(Class): 클래스는 객체를 정의하는 틀 또는 설계도와 같습니다. 클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 이루어져 있습니다.


객체란?

객체(Object): 객체는 클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것을 의미합니다. 객체는 클래스의 인스턴스(instance)라고도 부릅니다.


인스턴스란?

인스턴스(Instance): 클래스의 인스턴스라는 말은 어떤 클래스를 기반으로 실제로 생성된 객체를 의미합니다.

메소드란?

메소드(Method): 메소드는 클래스 내부에 정의된 함수입니다. 인스턴스 메소드는 객체가 생성되야만 호출할 수 있는 메소드를 의미합니다. 이 메소드는 객체의 필드에 접근이 가능하며, 객체에 따라 동작이 달라집니다.






생성자(5)



static 에서는

this를 사용할수없다.
왜냐, 

iv도 사용불가
this 사용불가
(this는 객체 자기자신을 의미한다)


생성자(6)
this 참조변수 와 this() 생성자의 차이점은 무엇인가?


1.this 참조변수

this 참조변수
this는 현재 객체를 가리키는 참조변수입니다. 주로 필드와 지역 변수의 이름이 같을 때 둘을 구분하거나 메소드에서 현재 객체를 참조할 필요가 있을 때 사용합니다.

java
public class Person {
    private String name;

    public Person(String name) {
        this.name = name;  // Here, 'this' is used to refer to the current object's 'name' field.
    }

    public void printName() {
        System.out.println("The name is " + this.name);  // Here, 'this' is used to refer to the current object's 'name' field.
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("John");
        person.printName();  // This will print "The name is John"
    }
}

2. this() 생성자

this() 생성자
this()는 같은 클래스 내의 다른 생성자를 호출하는데 사용됩니다. 이를 사용하면 한 생성자에서 다른 생성자의 코드를 재사용할 수 있습니다. 이는 코드 중복을 줄이고 코드의 유지 관리를 쉽게 합니다. 생성자 오버로딩(overloading)에서 주로 사용됩니다.

java
public class Person {
    private String name;
    private int age;

    public Person() {
        this("Unknown", 0);  // Here, 'this()' is used to call another constructor in the same class.
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void printDetails() {
        System.out.println("Name: " + this.name + ", Age: " + this.age);
    }
}

public class Main {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.printDetails();  // This will print "Name: Unknown, Age: 0"

        Person person2 = new Person("John", 25);
        person2.printDetails();  // This will print "Name: John, Age: 25"
    }
}


   
   
   
   

 

 

 

#자바 #개발공부 #프로그래밍공부 #코딩공부순서 #자바배우기전에 #프로그래밍언어공부 #프로그래밍언어공부방법 #자바스크립트공부 #코딩공부 #공부순서 #개발공부 #공부계획 #자바책추천 #자바스크립트 #코딩공부실패 #웹개발공부순서 #프로그래밍공부법 #개발자 #책

#자바 #자바기초 #자바변수 #자바리턴 #자바교육 #자바강의 #자바메소드 #자바가상머신 #자바클래스파일 #자바배우기전에 #자바자바스크립트차이점 #자바2명 #자바기초 #자바입문 #자바강의 #자바강좌 #자바의정석 #자바의정석 #자바2명타요 #자바스크립트 #자바기초강의

#java #javase #java언어 #해커java #java백엔드 #javalts #해커java #java비트연산자 #javabackend #javafrontend #프로그래밍공부 #indiastopmostjavatrainer #코딩공부순서 #코딩공부

#코딩 #코딩공부 #코딩공부순서 #lofi코딩 #음악공부 #공부 #프로그래밍공부 #코딩공부법 #코딩기초 #코딩독학 #개발공부 #파이썬공부 #코딩테스트 #코딩분야 #코딩강좌 #코딩학원 #코딩강의 #파이썬코딩 #공부용음악 #개발자공부 #코딩로드맵 #코딩공부

#코딩 #코딩인터뷰 #코딩독학 #코딩입문 #코딩공부 #코딩강의 #코딩강좌 #코딩테스트 #코딩기초 #코딩교육 #코딩분야 #코딩언어 #코딩전문 #파이썬코딩 #파이썬문법 #코딩기본개념 #class문법 #타입스크립트문법 #신문법 #문법1 #코딩이란 #코딩교육 #개발

 

 

 

 

 

반응형

댓글