개발자의 길/글로 적는 웹개발


■ regions 테이블에서 모든 데이터를 출력하세요. 

SELECT * FROM regions

■ departments 테이블에서 모든 데이터를 출력하세요. 

SELECT * FROM departments

■ job 테이블에서 직업ID와 직업이름을 전부 출력하세요.

SELECT job_id, job_title FROM jobs

■ countries 테이블에서 지역변호와 나라명을 전부 출력하세요.

SELECT region_id, country_name FROM countries;

■ jobs 테이블에서 최소 월급이 10000달러 이상인 직업들의 이름을 알아보세요.

SELECT job_title, min_salary FROM jobs WHERE min_salary >= 10000

■ employees 테이블에서 다음과 같이 출력해보세요.

EMPLOYEE_ID FIRST_NAME LAST_NAME JOB_ID SALARY
109 Daniel Faviet FI_ACCOUNT 9000
110 John Chen FI_ACCOUNT 8200
111 Ismeal Sciarra FI_ACCOUNT 7700
112 Jose Manuel Urman FI_ACCOUNT 7800
13 Luis Popp FI_ACCOUNT 6900
206 William Gietz AC_ACCOUNT 8300
SELECT employee_id, firt_name, last_name, job_id, salary
FROM employees
WHERE job_id IN('FI_ACCOUNT','AC_ACCOUNT');
ORDER BY 2 asc
SELECT employee_id, first_name, last_name, job_id, salary
FROM employees
WHERE job_id LIKE '%ACCOUNT'

■ 110번 부서의 이름을 출력하세요

부서번호 부서명
110 Accounting
SELECT department_id 부서번호, department_name 부서명
FROM departments
WHERE department_id = 110

 


■ 식별자 규칙

CaptaimMavel captainMarvel captainMarvel() CaptainMarvel() CAPTAIN_MARVEL
클래스 변수 메서드 생성자 상수

 

■ 에러가 나는 이유는?

public class Z {
 private CaptainMarvel() {}
 public void captainMarvel() {}
}
...더보기

클래스의 이름은 Z인데 기본생성자가 CaptainMarvel() 이기 때문에 에러가 납니다.

Z() 라고 해야 에러가 안납니다.

 

■ 자바의 자료형

기본자료형 객체자료형(=참조자료형)
변수의 경우 값이 직접대입(복사 개념) 변수의 경우 레퍼런스의 참조
종류 : boolean char byte short int long float double 종류 : 무한대
예시 에러가 나는 이유
String s = 'A'; String 형은 큰 따옴표로 사용해야한다. 작은 따옴표는 에러
A a = 3; 객체자료형 A인데 기본자료형이 들어가 에러
int i = 3.2; 기본자료형인 int(정수) 인데 값은 실수기 때문에 에러

 

■ 클래스

1) 객체의 설계도 2) 객체의 자료형
VO(DTO)란? Value Object 는 관계 데이터 베이스의 레코드에 대응하는 자바 클래스이다. 
VO 만드는 규칙
1) 멤버필드를 private 으로 선언
2) 기본 생성자를 선언
3) setter 와 getter 설정

 

■ VO 를 선언하세요. (setter 와 getter 생략)

저자 / 출판사 / 형태 / 정가
public class Book {
 private String writer, company;
 private int page, price;
 
 public Book(){}
 
}

 

■ 멤버

멤버필드 선언 : 접근제한자 (스태틱) (파이널) 자료형 변수명;
멤버메서드 선언 : 접근제한자 (스태틱) (파이널) 리턴자료형 메서드명(인자){ 리턴 }

 

■ 에러가 나는 이유는?

예시 에러가 나는 이유

public A test(int a) {

 A b = null;

}

리턴자료형인 A 가 있는데 리턴 키워드가 없어서 에러가 난다.

return b;

public void test(A a){

 int a = 4;

}

객체자료형 A인 인자의 변수명도 a, test 메서드의 지역변수 a의 이름과 같지만 자료형이 달라 에러가 난다.

private A static a; 순서가 잘못됐다. 접근제한자 static 자료형 a; 라고 해야 맞다.
public static b; 자료형이 없다. 

 

■ 실행 결과는?

public class A {
 private static int a;
 public static int test(int a){
  return a = 100;
 }
 public static void main(String[] args){
  a = test(20);
  System.out.println(a);
 }
 
}
...더보기
모르겠다!!! 물어보자

 

■ 멤버의 종류

스테틱멤버 메모리중 스태틱(Static) 영역에 존재 / 접근시 클래스명쩜 으로 접근
인스턴스멤버 메모리중 힙(Heap) 영역에 존재 / 접근시 객체의 레퍼런스쩜 으로 접근

 

■ 에러가 나는 이유?

public class A {
 private int a;
 public int test(int a){
  return a = 10;
 }
 
 private static int test(){
  int b = test(20);
  a = b;
 }
}
...더보기

모르겠다. 물어보자


 

■ 생성자

- 멤버필드의 초기화

- 기본생성자 + setter  를 편리하게 , 생성자 오버로딩

public class Book {
 private int no;
 private String name;
 public Book(int no, String name){}
 
 public static void main(String[] args){
  Book book = new Book(2,"공터에서");
  System.out.println(book.name);
 }
}
...더보기

null 값이 나옵니다.

int 형과 String 형의 인자 2개를 가진 생성자를 호출했지만 생성자에서 멤버필드로 값을 넣어주지 않았기 때문에 null 나옵니다. 

 

해결하기 위해서는 2개 짜리 생성자에다가 

public Book(int no, String name){

 this.no = no;

 this.name = name;

}

 

public class A {
 int a = 7;
 private A(){
  a = 4; //this. 생략이 되어있다는거 꼭 알아두자.
 }
 public static void main(String[] args){
  A a = new A();
  System.out.println(a.a);
 }
}
...더보기

결과는 4.

 

기본생성자를 호출하면 기본생성자 안에 this.a = 4 이기 때문에, 여기서 this. 생략되어 있다는거 알아두자.

클래스 A 의 기본자료형 int 지역변수 a가 7로 초기화 되어 있지만 4로 바뀜. 

그래서 결과는 4

 

 

public class A {
 static int a = 5;
 private A(int a){
  a += a;
 }
 private static void test(A a){
  System.out.println(a.a);
 }
 
 public static void main(String[] args){
  test(new A(a));
 }
}
...더보기
그림으로 그리지 못하겠다.ㅠㅠ이해가 잘 안됨.물어보자

 

■ String 

 

* String str = "안녕하세요"; 와 같이 이런걸 암시적 객체(=묵시적 객체) 생성 이라고 한다.

  String str = new String("안녕하세요"); 는 명시적 객체 생성 이라고 한다.

 

* 암시적 : 직접적으로 말이나 행동으로 드러내지 않고 은연중에 뜻을 나타내 보이는. 또는 그런  것 

* 명시적 : 내용이나 뜻을 분명하게 드러내 보이는. 또는 그런 것.

그림으로 그리면 확실히 이해가 된다.

 

public static void main(String[] args){
 String s = "한효주".substring(0,2); //암시적 객체생성 이라고 한다.
 s.substring(s.length());
 System.out.println(s.toString());
}
...더보기

- substring : 문자열 자르기 // substring() 인자 안에 int 의 따라(1개 또는 2개) 해당 문자열의 인덱스만큼 자른다.

"한효주".substring(0,2) 의 결과는 "한효" 이다. 첫번째 인자는 인덱스 0부터 시작이고, 두번째 인자의 뜻은 index 2가 아니라 길이 인 것 같다. 두번째 인자는 index 로 시작하지말고 1부터 시작하면 "한효" 까지이다. 

=>정확한 의미 찾아보자

 

- length : 문자열의 길이 // 해당 객체의 문자열 길이를 int 형으로 반환한다. (null 값은 포함되지 않음)

 

현재 "한효" 에서 문자열의 길이인 2를 int 형으로 반환.

 

- toString : int 형 변수를 String 객체로 변환한다.

 

현재 2인 값을 String 객체로 변환하면 "한효"

 

그래서 실행결과는 "한효" 이다.

 

public static void main(String[] args){
 String s = "한효주";
 System.out.println(new String("한효주").equals(s));
}
...더보기

- equals : 문자열 비교 // 해당 문자열과 매개변수의 문자열과 비교하여 true 또는 false 를 반환 ( boolean 형 ) 

결과는 true

 

 


 

■ 배열

Object[] o = {"쯔위","나연","사나","모모"};
결과 쯔위나연사나모모

= 위와 같이 배열이 선언되어 있다. 아래와 같이 출력하기 위한 코드를 작성하세요.

일반 for 문

public class forEx{
  public static void main(String[] args){
   Object[] o = {"쯔위","나연","사나","모모"};

   for(int i = 0 ; i < o.length() ; i++){
    System.out.print(o[i])
   }//for end
  }//main() end
}
//향상된 for문 (=for each)
public class forEx2{
 public static void main(String[] args){
  Object[] o = {"쯔위","나연","사나","모모"};
  

  for(Object name : o ){
   System.out.print(name);
  }//for end
 }//main() end
}

 

■ 오버로딩(Overloading) / 오버라이딩(Overwridding)

차이점 오버로딩 오버라이딩
영역 하나의 클래스 상속 간의 클래스들(최소 2개 이상)
메서드명 똑같아야 함 똑같아야 함
인자 반드시 달라야함 똑같아야 함
리턴값 달라도 됨(같아도 상관없음) 똑같아야 함
접근제한자 달라도됨(같아도 상관없음) 달라도 되나, 자식 클래스가 부모보다 넓게

 

class A{
 int a = 7;
 void test(){
  a = 10;
 }
}

public class Ex extends A{
 void test(){
  a = 500;
 }
 public static void main(String[] args){
 A a = new Ex();
 a.test();
 System.out.println(a.a);
 }
}

결과

 

class A {
 int a = 5;
 void test(){
  a = 10;
 }
}

public class Ex extends A{
 int a = 100;
 void test(){
  a = 500;
 }
 public static void main(String[] args){
  A a = new Ex();
  a.test();
  System.out.println(a.a);
 }
}

결과

위 2개의 예제는 다시 한 번 공부해보자.

 


 

■ 상속을 나타내는 키워드는 extends 입니다.

 

■ 프로그램의 결과는 무엇일까요?

public static void main(String[] args){
 Integer[] iArr = new Integer[4];
 
 iArr[0] = 3;
 iArr[2] = 5;
 
 for(Integer i : iArr){
  System.out.println(i);
 }
}

 

정답

...더보기

기본자료형 int가 아닌 Integer는 객체자료형이다. new 라는 키워드를 통해 Integer 배열 4개를 가진 객체를 생성.

0번지에는 3, 2번지에는 5 를 대입, 현재 0번지와 2번지를 제외한 1,3번지는 0 값이 아닌 null 값이 들어가 있다.

 

why? 객체자료형이기 때문이다.

 

즉 결과는 

3

null

5

null


■ 모든 클래스의 조상Object 클래스 입니다.

 

■ 프로그램의 결과는 무엇일까요?

public class Ex4{
 public static void main(String[] args){
  Integer i1 = new Integer("5");
  Integer i2 = 5;
  Integer i3 = new Integer(5);
  Integer i4 = 5;
  
  System.out.println((i1==i2));
  System.out.println((i2==i4));
  System.out.println((i1==i3));
  System.out.println((i2.equals(i4));
  System.out.println((i3.equals(i1));
 }
}

정답

...더보기

false// == 는 주소를 비교한다. 즉 명시적객체생성을 통한 i1 와 암시적객체생성을 한 i2 를 다르기 때문에 false

true // 하나의 객체의 레퍼런스를 참조했기 때문에 같은 주소다. 그래서 true

false // new 라는 키워드를 통해 만들 때마다 새로운 객체가 생성되기 때문에 다른 레퍼런스다. 그래서 false

true // equals() 메서드는 대상의 내용을 비교하기 때문에 true 다

true // 주소는 다르지만 내용은 같기 때문에 true 다.


 

Wrapper 들은 기본자료형을 객체로 이용할 때 사용하는 클래스들

* Wrapper class 는 java.lang 패키지에 정의된다.

■ 기본자료형 -> 객체자료형으로 바꾸는걸 오토박싱 이라고 하며 암시적객체생성(=묵시적객체생성) 이라고 한다.

■ 객체자료형 -> 기본자료형으로 바꾸는걸 언박싱 일아고 하며 명시적객체생성 이라고 한다.

Integer i = 5; 오토박싱 이자 암시적객체생성

int i2 = i; 언박싱

 

최근 글