목록자바 공부 (9)
개발의 시작과 끝
FetchType 엔티티 간의 관계를 로딩할 때 사용되는 전략을 결정하는 열거형. 어떤 상황에서 관련된 엔티티를 로딩할지 결정하는 중요한 요소이며, 데이터 액세스 패턴과 성능을 고려하여 적절한 타입을 설정해야함. 크게 두가지 타입으로 나뉘는데 Eager 전략과 Lazy 전략이 있다. 즉시로딩(EAGER) - FetchType.EAGER로 설정하여 사용. - 연관된 엔티티를 조회할 때, 즉시 관련된 엔티티를 모두 함께 로딩. - 관련된 데이터를 한 번에 모두 가져오기 때문에 성능 저하 가능성이 있음. - 일반적으로 연관된 객체가 항상 필요한 경우에 사용. 지연로딩(LAZY) - FetchType.LAZY로 설정하여 사용. - 연관된 엔티티를 실제로 사용할 때 까지 로딩 지연. - 연관된 엔티티에 접근할 때..
a9A - 12일차 구성(Composition) class Main { public static void main(String[] args) { 사람 a사람 = new 사람(); a사람.나이 = 20; a사람.a왼팔 = new 팔(); } } class 사람 { int 나이; 팔 a왼팔; //구성패턴 -> 구성방식 / 팔은 사람의 구성품일 뿐임. 다리 a왼다리; } /* 이것은 잘못된것임 --> 팔은 사람의 구성품이지 사람이 아니기 때문. 사람 클래스를 이용해 객체를 만들 수 있다. */ class 팔 { } class 다리 { }
a9A - 11일차 영역 힙 영역(Heap Area) 힙 영역에는 코드에서 'new'명령을 통해 생성된 인스턴스 변수가 저장되는 영역이다. 어떤 메서드인지는 상관이 없으며 new를 통해 만들어지는 메모리는 모두 힙 영역에 저장된다. 스택 영역에 저장되는 지역변수, 매개변수와는 달리 힙 영역의 메모리는 메소드 호출이 끝나도 가비지 컬렉터에 의해 지워지기 전까지는 사라지지 않고 유지된다. 호출이 되지 않거나 주소를 잃어버리면 가비지 컬렉터가 변수를 지운다. 스택 영역(Steck Area) 스택 영역은 함수 호출 시 생성되는 지역변수와 매개변수가 저장되는 영역이다. 스택 영역에 있던 변수들은 함수 호출이 완료되면 사라진다. 지역변수와 매개변수의 특징은 이 것들이 선언된 그 블록 안에서만 유효한 변수이며 이 변..
a9A - 9~10일차 상속을 통한 캐스팅 허용 class 무기 { } class 칼 extends 무기 { void 공격() { System.out.println("칼로 공격합니다"); } 무기 a무기 = new 칼(); a무기.공격(); // 출력 : x 칼을 작동시키는 것 a무기는 리모컨으로 원격조종을 하게 된다. a무기에는 '칼' 객체가 생성된다. 그러면 칼이 공격하기 때문에 칼에 공격 메서드가 들어간다. 하지만 칼에 공격 메서드가 있음에도 불구하고 작동하지 않는 이유는 물려받은 '무기' 메서드에 '공격' 메서드가 없기 때문이다. -> 기능은 있는데 호출할 수있는 버튼이 없다. class 무기 { //메서드의 용도 - 기능, 버튼 void 공격(){ } } class 칼 extends 무기 { v..
a9A - 7~8일차 상속(Inheritance) 부모 클래스의 속성들을 자식 클래스가 복사 해오는 것. 상속의 규칙 예를 들어 흰오리가 오리의 클래스를 물려받으면 흰오리도 오리의 일종이기 때문에 물려받을 수 있지만 오리를 없애고 흰오리에 날다를 넣고 그것을 청둥오리한테 물려받게 했을 때 자바에서는 가능 하지만 청둥오리는 흰오리가 아니기 때문에 상식적으로 상속이 불가능 하다. 이를 어긴다면 나중에 자바에서 꼬일 수가 있다. class 오리 { void 날다() { System.out.println("오리가 날개로 날아갑니다."); } } class 흰오리 extends 오리 { } class 청둥오리 extends 오리 { } 청둥오리 a청둥오리 = new 청둥오리(); a청둥오리.날다(); // 출력 ..
a7A - 7일차 static 메서드 static - 고정시키다. static을 사용하면 객체화 없이 설계도에 있는 능력을 바로 쓸 수 있다. 예를들어 달리다 메서드를 만들때 앞에 static을 붙이면 달리다 메서드는 static 메서드가 된다. static 메서드는 함수고도 하며, 모든 인스턴스들이 공유하는 자원으로 사용하고 싶을 때 쓴다. static이 붙어있는 경우 객체화 하지 않아도 되므로 new를 하지 않아도 돼서 편리하다. 바로 클래스로 쓸 수 있고, 변수나 메서드에 붙일 수 있다. class Main { public static void main(String[] args) { 자동차.달리다(); } } class 자동차 { static void 달리다() { // 인스턴스 메서드 System..
a9A - 5~6일차 레퍼런스 변수 레퍼런스 변수는 우리가 자바에서 흔히 예로 들던 리모컨을 전문용어로 레퍼런스 변수라고 한다. ex ) 일반 변수 - int a, double d, / 래퍼런스 변수 - 자동차 a, 사람 b class Main { public static void main(String[] args) { 자동차 a자동차; a자동차 = new 자동차(); a자동차.달리다(); } } class 자동차 { void 달리다() { System.out.println("자동차가 달립니다."); } } 자동차 a자동차; - 자동차를 조종할 리모컨을 저장할 수 있는 a자동차 라는 변수를 만든것. 기본적으로 이 a자동차 변수에는 쓰레기 리모콘 = 레퍼런스(null)이 담겨진다. a자동차 = new 자동..
a9A - 4~5일차 클래스 어떠한 객체(폴더)를 만드려면 먼저 클래스(설계도)부터 만들어야 한다. 자바에서 설계도를 생성하려면 메인 클래스 바깥쪽에 또 다른 클래스를 생성하면 된다. 그리고 생성된 클래스 네임 옆에는 ();을 붙이지 않는다. 클래스와 메서드 설명 class Main { public static void main(String[] args) { /* 1. 출력이나 연산처리는 메서드를 이용함 2. class는 정의하는 곳 3. 연산처리는 메서드 안에서만 메서드를 사용하는 이유 -> 코드를 재활용 할 수 있기 때문 여러번 출력해야하는 것을 메서드를 통해 한줄로 해결 할 수 있음. */ new 햄버거기계(); => 객체를 하나 만드는 것 클래스에 담는 변수 생성은 클래스 네임과 변수명을 써주면 ..