7일차 수업 ( 인터페이스, 추상클래스)

1. 인터페이스 ( interface )
 - *.java로 저장.
 - 객체생성불가 (new 불가 )
 - 다른 클래스 도움을 받아서 인터페이스 구성요소 사용 가능하다. (준 상속 관계)

 - 다중 구현이 가능
 - 반드시 인터페이스의 추상 메소드를 구현해야 된다. {} 사용해야된다.
 - 오버라이딩 메소드 문법을 따른다
 - 인터페이스끼리 상속 가능하다.

 

public interface 인터페이스명 {} 사용하고

다른 클래스에서는 implements 인터페이스명{} 으로 사용

 

<인터페이스 구성요소>
가. 상수
-> 자동으로 public static final로 지정된다.
예 > int num =3;  //상수, 자동으로 붙어 있는것이다.

나. 추상 메소드
-> 자동으로 public abstract 가 지정된다.
==> 자동적으로 public abstract 가 지정된다.
    예 > void zzz();

* 인터페이스 용도 : 하위클래스에게 특정 메소드들을 강제적으로 사용하도록 하기 위해서.
       (통일성, 일관성 )

 

2. final 키워드
=> '마지막'
=> '금지' 의미
=> 사용
  : 클래스 --> 상속불가
  : 변수 --> 값변경불가 ( 상수 )
  --> 상수는 대문자로 지정한다.
  --> 일반적으로 public static final 로 지정한다.
  : 메소드 --> 오버라이딩 불가

 

3. 추상클래스 ( abstract class )
- *.java 로 저장한다.
- 추상메소드를 가지면 반드시 추상클래스로 작성해야 된다. (역은 성립 안됨)
- 객체생성불가 ( new 불가 ) 따라서 다른 클래스의 도움을 받아서 사용 가능하다.
  (추상클래스와 클래스의 관계는 상속관계)

- 단일 상속만 지원, UML 표기법은 이태릭체로 표현

- 클래스 - >반드시 추상클래스의 추상메소드는 오버라이딩해야됨.

 

구성요소 :
- 인스턴스변수
- 메소드 ( concreate method )
- 생성자
- 추상메소드 ( abstract method ) 

 

* 용도
-> 여러 구성요소 중에서 특정 메소드만 강제할 목적으로...
  (다른 변수, 메소드등은 하위 클래스에서 이전의 자식클래스처럼 부모요소를
    마음대로 사용하고 특정메소드만 강제할 목적)

 

====수업 내용======

 

1. 인터페이스 ( interface )

특징 :
 *.java로 저장.
 객체생성불가 (new 불가 )
 다른 클래스 도움을 받아서 인터페이스 구성요소 사용 가능하다.
 (준 상속 관계)
 
 <<인터페이스>> : 큰 타입 ( 삼촌)
   => implements 키워드

  클래스 : 작은 타입
  : 다중 구현이 가능
  : 반드시 인터페이스의 추상 메소드를 구현해야 된다. {} 사용해야된다.
  : 오버라이딩 메소드 문법을 따른다
  : 인터페이스끼리 상속 가능하다.

<<interface>>
* 정리

 클래스
  extends, 단일상속
 클래스

///////////////////

 <<interface>>
  implements, 다중 구현
 클래스(인터페이스내의 모든 추상 메소드를 오버라이딩 해야 된다.)

 <<interface>>
  extends , 다중 상속 가능
 <<interface>>

문법 :
 public interface 인터페이스명 {}

<인터페이스 구성요소>
가. 상수
-> 자동으로 public static final로 지정된다.
예 > int num =3;  //상수, 자동으로 붙어 있는것이다.

나. 추상 메소드
-> 자동으로 public abstract 가 지정된다.
==> 자동적으로 public abstract 가 지정된다.
    예 > void zzz();

* 인터페이스 용도 : 하위클래스에게 특정 메소드들을 강제적으로 사용하도록 하기 위해서.
       (통일성, 일관성 )

 예 >
    1) 날아다니는 것들의 기본동작인 3가지를 구현하는
       메소드명을 마음대로 지정해서 사용하는 형태.
       (관리가 어렵다.)

    Bird  Airplane  SuperMan
  :x()     : a()      : k()
  :y()     
  :z()

    2) 부모 클래스 이용
  
  부모클래스 : takeOff(){ }  //이륙
        fly() { }   //비행
        land(){ }   //착륙

       Bird       Airplane       SuperMan
 takeOff(){ }    takeOff(){ }       xxx(){ }  //오버라이딩 하는데 하나만 다르게 하면..


    3) 인터페이스 이용

  <<Flayer>>  takeOff(){ }  //이륙
        fly() { }   //비행
        land(){ }   //착륙

    Bird       Airplane       SuperMan

   takeOff(){ }     takeOff(){ }   takeOff(){ }
     fly() { }       fly() { }       fly() { }
     land(){ }       land(){ }      land(){ }


2. final 키워드
=> '마지막'
=> '금지' 의미
=> 사용
  : 클래스 --> 상속불가
  : 변수 --> 값변경불가 ( 상수 )
  --> 상수는 대문자로 지정한다.
  --> 일반적으로 public static final 로 지정한다.
  : 메소드 --> 오버라이딩 불가

3. 메소드 종류

 가. worker 메소드 ( getter, setter ) , caler 메소드

 나. 일반메소드 / 추상메소드

 - 일반 메소드 ( concreate method )
 -> 메소드가 해야할 작업이 정해짐.
 예> public void aaa(){  }

 - 추상 메소드 ( abstract method )
 -> 메소드가 해야할 작업이 미정, 따라서 {} 이 없다.
 예> public abstract void aaa();

4. 추상클래스 ( abstract class )
특징 : *.java 로 저장한다.
 추상메소드를 가지면 반드시 추상클래스로 작성해야 된다.
 (역은 성립 안됨)
 객체생성불가 ( new 불가 )
 따라서 다른 클래스의 도움을 받아서 사용 가능하다.
 ( 추상클래스와 클래스의 관계는 상속관계)

    추상클래스
      
    : extends, 단일 상속

    클래스 - >반드시 추상클래스의 추상메소드는 오버라이딩해야됨.


문법 :
 public abstract class 클래스명{}
구성요소 :
- 인스턴스변수
- 메소드 ( concreate method )
- 생성자
- 추상메소드 ( abstract method ) 

* 용도
-> 여러 구성요소 중에서 특정 메소드만 강제할 목적으로...
  (다른 변수, 메소드등은 하위 클래스에서 이전의 자식클래스처럼 부모요소를
    마음대로 사용하고 특정메소드만 강제할 목적)

5. static 키워드
* 프로그램 실행 과정
소스코드--> 컴파일--> 실행-->

   필요한 객체생성(new)
method area 영역  ---------->
(class area )
- 클래스 로드
- static 키워드 지정한 요소들이 자동 로드.
- ( - static 변수
    - static 메소드
    - static 클래스 )
대표적인 예 : main 메소드 자동으로 로드되고, 자동으로 실행된다.
-> 프로그램 시작시 생성 ~ 프로그램 종료시 제거
-> 단 한번만 생성된다.
-> static요소 접근은
클래스명.변수
클래스명.메소드


  메소드호출,
  참조변수
heap 메모리 ---------->
- 인스턴스 변수,
concrete 메소드 생성
-> 객체생성시 생성 ~ 객체소멸시 제거됨.
-> new 할때 마다생성
-> 요소 접근은
참조변수.변수
참조변수.메소드

stack 메모리
- 로컬변수 생성
-> 메소드호출시 생성 ~ 메소드 종료시 제거됨
-> 메소드 호출할때 마다 생성
-> 주의할점은 반드시 사용전에 초기화 한다.

가. static 변수
=> 단 한번 생성됨.
=> 가장 오래 산다.
====> 데이터 누적용

나. static 메소드
=> 객체생성 없이 사용하기 위해서
( 자주 사용하는 메소드인 경우에 )
클래스명.메소드
==> 오버라이딩 불가

* 오버라이딩 불가
- final 메소드
- static 메소드
- private 메소드
=> static 메소드내에서 아직 생성되지 않은 인스턴스 변수 인식 불가.

예> Math.random();
    Integer.parseInt()

다. static 클래스
=> 중첩 클래스 ( nested class )

   class Outer { //Outer 클래스

   static class Inner{
   }
   }

6. static 이용한 기법

가. 싱글톤 디자인 패턴
==> 인스턴스를 하나만 생성하는 방법
( 현실세계의 객체가 단하나 : 서원대학교, 지구, 대한민국... )

나. static import
==> static 변수나 메소드를 좀더 쉽게 사용하기 위한 방법.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

6일차 수업 (다형성)

1. 다형성( polymorphism )

정의 : 하나의 변수가 서로 다른 데이터를 저장할 수 있는 능력.

 

이런식으로 사용 ->  데이터형 변수명;

 

2. 다형성의 적용 형태

가. 배열
-> 배열은 같은 데이터만 저장가능하다.
-> 다형성을 적용하면 데이터가 달라도 된다.
만약, object 배열을 생성하면 모든 데이터를 저장 가능하다.

나. 메소드 인자

1) Employee : taxEmployee(){10%}
   Manager: taxManager(){20%}
   Engineer: taxEngineer(){15%}

2) 오버라이딩
   Employee : taxEmployee(){10%}
   Manager: taxEmployee(){20%}
   Engineer: taxEmployee(){15%}

3) 부모 클래스에 모두 구현하고 자식은 그냥 사용.  

 

3. 다형성의 메소드 호출

Shape s = new Rectangle(10,10); //다형성
s.getArea(); // 동적 바인딩 발생

* 동적 바인딩 발생
==> 메소드에서 발생
==> 다형성으로 생성시 발생
==> 정의 : 컴파일시에는 변수의 원래 타입의 메소드를 인식하고 실행시에는 실제로
    new 한 타입의 메소드를 인식하는 것.

 

4. 원래 타입 식별

 : instanceof 연산자 사용
 : 변수명 instanceof 클래스명
-> 주의할점은 반드시 계층구조가 낮은 것부터 비교한다.

 

<다형성 최종 정리>

1) 상속
2) 다형성을 적용하면 여러 데이터를 저장 가능하다.
따라서 식별방법이 필요하다.
3) instanceof 로 식별
4) 원래 데이터형으로 형변환하고 작업한다.

 

6. Object 클래스

7.toString() 메소드

 

<배운것>

Eclipse 에서 Argument 에서 문자열or숫자를 입력 받는다.

public static void main(String[] args) {

 

String a = args[*]; //그냥 문자열을 받아와 a에 저장 배열처럼 이용

double salay = Double.parseDouble(args[0]); //double 형으로 받아와 salay에 저장

 

}

에서 Argument 에서 args를 말하는 것!

먼저 .java 클릭후에 마우스 오른쪽 버튼을 누르고 run as -> run cofi....클릭

Argument 의 String prompt 클릭하고 적용

 

수업노트 ==========

1. 다형성( polymorphism : 폴리몰피즘 )

정의 : 변수는 데이터형을 갖는다. 따라서 저장할 데이터의 데이터를 알고 있다.

예> 데이터형 변수명;

    하나의 변수가 서로 다른 데이터를 저장할 수 있는 능력.

- 기본형 형태
예>
 short s = 10;
 int i = 20;  // i에 20 정수값 저장
     i = s;   // idp short타입 데이터 저장

 큰 타입 = 작은 타입;
 큰 타입과 작은 타입이 같은 종이라서 가능하다.
 작은 타입 = 큰 타입; //에러 발생
 -> 작은 타입 = (작은타입) 큰 타입;
- 참조형 형태

예> Employee e = new Manager();   // 다형성
      e = new Engineer();  // 다형성
      e + new Employee();  // 일반적 방법

    Employee e = new Manager();
    큰 타입 = 작은 타입;
    큰 타입과 작은 타입이 같은 종(상속 관계) 이다.

용도 : 하나의 변수로 재사용하자.

2. 다형성의 적용 형태

가. 배열
-> 배열은 같은 데이터만 저장가능하다.
-> 다형성을 적용하면 데이터가 달라도 된다.
만약, object 배열을 생성하면 모든 데이터를 저장 가능하다.

Object[] obj = new object[10];
obj[0] = "홍길동";
obj[1] = new Employee();
obj[2] = 12;

나. 메소드 인자
예>      Employee
Manager      Engineer
=> 세금 구하기
   일반 직원 : 10%
   관리자 : 20%
   엔지니어 15%

1) Employee : taxEmployee(){10%}
   Manager: taxManager(){20%}
   Engineer: taxEngineer(){15%}

2) 오버라이딩
   Employee : taxEmployee(){10%}
   Manager: taxEmployee(){20%}
   Engineer: taxEmployee(){15%}

3) 부모 클래스에 모두 구현하고 자식은 그냥 사용.

예> public void xxx( long i ) { }
 int x =10;
 xxx(x);
 short s = 20;
 xxx(s);


   Employee : taxEmployee(){ //Object 사용 가능
  10%
  20%
  15%
  }
   Manager :
  taxEmployee( new Manager());
   Engineer :
  taxEngineer( new Engineer());

3. 다형성의 메소드 호출

Shape s = new Rectangle(10,10); //다형성
s.getArea(); // 동적 바인딩 발생

* 동적 바인딩 발생
==> 메소드에서 발생
==> 다형성으로 생성시 발생
==> 정의 : 컴파일시에는 변수의 원래 타입의 메소드를 인식하고 실행시에는 실제로
    new 한 타입의 메소드를 인식하는 것.

4. 원래 타입 식별?

 : instanceof 연산자 사용
 : 변수명 instanceof 클래스명
-> 주의할점은 반드시 계층구조가 낮은 것부터 비교한다.

예>

5. 메소드의 인자로 데이터를 넘기는 방법

=> 자바는 call by value
가. 기본형을 인자로 넘기면 값이 복사된다. 따라서 받는 곳에서 데이터를 변경해도 원래 데이터는
    변경되 지 않는다.

나. 참조형을 인자로 넘기면 주소값이 넘어가고 따라서 동일한 주소를 가리키게 된다. 주소를
    받은 곳에서 데이터를 변경하면 원래 데이터도 변경된다.

=> call by value reference

다형성?
1) 상속
2) 다형성ㅇ을 적용하면 여러 데이터를 저장 가능하다.
따라서 식별방법이 필요하다.
3) instanceof 로 식별
4) 원래 데이터형으로 형변환하고 작업한다.


6. Object 클래스
- 최상위 클래스이다.
모든 클래스의 부모 클래스이다.
(java.lang.Object 의 모든 구성요소를 모든 클래스가 사용가능하다. )

- 대표적으로 2가지 메소드 사용법을 알자
가. toString() 메소드

나. equals() 메소드

7.toString() 메소드
=> 문자열로 변경하는 메소드.
=> 자동호출된다.
( 참조변수를 Print 메소드로 출력할때 자동으로 호출된다.)
예> String name = "xxx";
    System.out.println

=> 참조변수에는 위치값이 저장되어 있는데, console창에 출력되기 위해서는 문자열이 변경되어야 한다.
따라서 자동으로 toStirng() 붙는다.

=> Object의 toString() 메소드 구현은 다음과 같다.

  클래스명@16진수

예>  Object

Stirng    Date , Integer,
=> 대부분 API가 모두 오버라이딩되어 있다.
@ 대신에 실제갑 출력하게 구현되어 있다.

Person
=> 개발자가 명시적으로 만든 클래스이다.
따라서 @가 나온다.
=> 우리도 오버라이딩 하자

8. equals 메소드

-> Object 의 equals 메소드 구현은 다음과 같다.
  " ==  " 연산자로 비교되어 있다.
  ( 위치값 비교가 된다.)

예> Object : == 비교

String
 -> 대부분의 API가 모두 오버라이딩되어 있다. 
(실제값 비교하게 구현 되어 있다.)

Person
API 실제
* 동등비교

가. == 연산자
- 기본형
예> int n =3;
    int n2 = 3;
    if(n==n2) ==> 실제값 비교

- 참조형
예> Person p = new Person("박보영");
    Person p2 = new Person("박보영");
    if( p==p2) ==> 위치값 비교, false
따라서 참조형 동등비교는 == 비교하지 말고 equals 메소드로 사용한다.
(정말로 위치값을 비교하는 경우에만 == 사용한다. )

나. equals 메소드
- 참조형
- 실제값의 동등비교시 사용
예>
 String name = "박보영";
 String name2 = "박보영";
 System.out.println(name.equals(name2)); //true

 Person p = new Person("곽보근");
 Person p2 = new Person("곽보근");

 System.out.println(p.equals(p2));

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

5일차 수업 ( Argument로 정수및 문자형 받아오기 )

1. 클래스들간의 관계( class relationship )
=> 여러 클래스들간에 유기적으로 관련을 맺으면서 하나의 어플리케이션이 동작된다.

=> 현실세계도 객체간의 관계가 존재한다.
  ( 부모자식관계, 학생과교수관계, 친구관계, ....)

   마찬가지로 가상세계에서도 특별한 관계가 존재한다.

 

2. 자바의 관계?

a) has a 관계

트럭 has a 엔진 => 트럭과 엔진의 lifecycle 동일

b) is a 관계 -> 상속관계

관리자 is a 사원
상속관계이다.

 

3. 상속 ( inheritance )

- 클래스들간의 관계중에서 is a 관계이다.
  ( 같은 종 )

 

public class 학생{}
// 대학생 is a 학생
public class 대학생 extends 학생{}

 

* 특징
1 )부모 클래스의 멤버(인스턴스변수,메소드)를 자식이 선언없이 사용 가능하다.

->'상속받는다' 라고 부른다.
2) 부모생성자와 private로 지정된 멤버는 상속 불가.

-> 단일 상속만 제공된다.
==> extends 클래스
==> 계층구조를 명확하게 하기 위해서

3) 자식보다 부모를 먼저 생성한다.
따라서 부모의 생성자를 자동호출하는데 super키워드 이용해서 호출한다.

4) 모든클래스(사용자지정클래스 = API)는 계층구조로 되어 있다.
( 상속관계 )
java.lang.object 클래스가 모든 클래스의 최상위 클래스이다.
(==> object 클래스의 멤버를 모든 클래스가 사용가능하다.)
extends 가 없는 클래스에는 자동으로 extends Object가 지정된다.
따라서 모든 클래스의 부모는 Object가 된다.
항상 Object 클래스가 먼저 생성되고 나중에 순차적으로 생성된다.

 

4. 접근 지정자 (access modifier )
* 지정자( modifier )?
=> 특별한 동작을 취하도록 의미를 갖는 키워드.

 

가. 일반 지정자 : static , final, abstract

예>
 static int num;
 static final int size =3;
 public void a(){}
 public abstract void b();
 public abstrant class Test{};
 public final class AAA{}

나 접근 지정자

=> 클래스들간에 접근제한을 설정하는 방법.

=> 종류 4가지

- public
=> 모든 클래스가 접근 가능하다.
   ( 같은 패키지 및 다른 패키지 모두)
=> 클래스와 메소드에 주로사용. 
- protected 같은 패키지에서 접근가능. +"상속관계(패키지가 달라도 가능)
 
- (default, friendly)
- private
=> 같은 클래스에 접근가능
   ( 상송관계도 부모의 private 멤버를 자식이 접근 불가)
=>인스턴스 변수에 주로 사용
   ( 데이터 보호 이유, 메소드 통해서 인수턴수 변수에 접근 가능)

예> private Strign name;
    plevate int = age;
    외부에서 접근할 필요가 없는 로컬메소드 사용시.
예> public class Test{
 public void a(){ local();}
 public void b(){}

 private void local(){} //Test클래스에서만 사용가능
 }

-> 은닉화 은닉화 구현시가 이용된다.

 

 

Argument 로 정수형 및 문자형 받아오기

 

int data1 = Integer.parseInt(args[0]);  //정수형으로 받아오는것

String arg = args[1];                        // 문자열로 받아오는것
char operator = arg.charAt(0);          //문자열로 받아온것을 문자형으로
int data2 = Integer.parseInt(args[2]);

 

 

====힉습 내용====

 

 1. 클래스들간의 관계( class relationship )
=> 여러 클래스들간에 유기적으로 관련을 맺으면서 하나의 어플리케이션이
   동작된다.

=> 현실세계도 객체간의 관계가 존재한다.
  ( 부모자식관계, 학생과교수관계, 친구관계, ....)

   마찬가지로 가상세계에서도 특별한 관계가 존재한다.

2. 자바의 관계?
==> 학생, 대학생, 컴퓨터, 트럭, 엔진, 라디오.....

가. has a 관계
학생 has a 컴퓨터
트럭 has a 엔진 => 트럭과 엔진의 lifecycle 동일
                => composition
트럭 has a 라디오 => 트럭과 엔진의 lifecycle 다르다.
                  => aggregation

출력결과
==> 수정은 withdraw, deposit 메소드 리턴타입을 boolean으로 변경
입금 : 300 true
출금 : 400 true
출금 : 500 true
출금 : 500 false

홍길동 잔액 : 400

나. is a 관계

대학생 is a 학생
관리자 is a 사원
: 상속관계이다.

3. 상속 ( inheritance )

: 클래스들간의 관계중에서 is a 관계이다.
  ( 같은 종 )
: UML
 학생 => 큰타입 ( 부모클래서, super클래스, parent클래스)
  => subclassing (상속)

 대학생 => 작은타입( 자식클래스, sub클래스, child클래스 )

* 코드표현

public class 학생{}
// 대학생 is a 학생
public class 대학생 extends 학생{}

* 특징
1 )부모 클래스의 멤버(인스턴스변수,메소드)를 자식이 선언없이 사용 가능하다.

->'상속받는다' 라고 부른다.
2) 부모생성자와 private로 지정된 멤버는 상속 불가.

-> 단일 상속만 제공된다.
==> extends 클래스
==> 계층구조를 명확하게 하기 위해서

3) 자식보다 부모를 먼저 생성한다.
따라서 부모의 생성자를 자동호출하는데 super키워드 이용해서 호출한다.

4) 모든클래스(사용자지정클래스 = API)는 계층구조로 되어 있다.
( 상속관계 )
java.lang.object 클래스가 모든 클래스의 최상위 클래스이다.
(==> object 클래스의 멤버를 모든 클래스가 사용가능하다.)
extends 가 없는 클래스에는 자동으로 extends Object가 지정된다.
따라서 모든 클래스의 부모는 Object가 된다.
항상 Object 클래스가 먼저 생성되고 나중에 순차적으로 생성된다.


예>
 Object
 
 Employee{}

 Manager extends Employee{}


4. super 키워드

:this 키워드 자신을 의미하고
 super 키워드는 부모를 의미한다.

:super 키워드 사용하기 위해서는 상속전제/

:super

 

 


예제>
1) 개별적으로 구현
 사각형       원       삼각형
-w            -r        -w
-h                      -h

-넓이()       -넓이()   -넓이()

2) 상속이용
==> 사각형,원,삼각형의 공통적인 특징을 추출해서 큰 개념의 클래스 생성 가능 (  일반화 방법 )

 도형
 -w
 -h
 -

사각형       원       삼각형
-area(){     - area{r*r*3.14}        -area(){w*h/2}
w*h
}

6. 접근 지정자 (access modifier )
* 지정자( modifier )?
=> 특별한 동작을 취하도록 의미를 갖는 키워드.

종류 2가지
가. 일반 지정자 : static , final, abstract

예>
 static int num;
 static final int size =3;
 public void a(){}
 public abstract void b();
 public abstrant class Test{};
 public final class AAA{}

나 접근 지정자

=> 클래스들간에 접근제한을 설정하는 방법.

=> 종류 4가지

- public
=> 모든 클래스가 접근 가능하다.
   ( 같은 패키지 및 다른 패키지 모두)
=> 클래스와 메소드에 주로사용. 
- protected 같은 패키지에서 접근가능. +"상속관계(패키지가 달라도 가능)
 
- (default, friendly)
- private
=> 같은 클래스에 접근가능
   ( 상송관계도 부모의 private 멤버를 자식이 접근 불가)
=>인스턴스 변수에 주로 사용
   ( 데이터 보호 이유, 메소드 통해서 인수턴수 변수에 접근 가능)

예> private Strign name;
    plevate int = age;
    외부에서 접근할 필요가 없는 로컬메소드 사용시.
예> public class Test{
 public void a(){ local();}
 public void b(){}

 private void local(){} //Test클래스에서만 사용가능
  
}

-> 은닉화 은닉화 구현시가 이용된다.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

4일차 수업

 

1. this 키워드 : 메모리에 올라간 자기 자신을 가리킬때 사용

가. 인스턴스변수와 로컬변수와 동일하기 때문에 구별하기 위해 사용
    this.XXX 인스턴스 변수를 가리킨다.

예> String name;  // 인스턴스 변수
    public void setName(String name){  // 로컬변수
     this.name = name;
    }
나. 오버로딩 생성자를 호출할때 사용. (생성자 끼리 서로 호출) 

 

2. 패키지 ( package )
- 클래스 파일들을 관리할 목적으로 묶는방법.
- 관련된 클래스들끼리 동일한 패키지명으로 지정한다. ( 윈도우 폴더와 비슷 ) 

3. import 문

- 패키지가 다른 클래스를 사용하기 위한 방법.

- 여러개의 import 문을 사용 할 수있다.

 

예> import 패키지명.패키지명2.클래스명;

 

4. 가변 인자 (Varargs)

- 일반적인 메소드 호출시 사용
- 메소드명과 argument list가 일치해야 된다.

 

 

5. 배열 (array)

* 데이터 저장 방법
가. 변수
==> 데이터 10개이면 변수 10개 필요.
    10개의 변수명을 모두 알아야 사용 가능하다.
    서로 다른 변수명을 모두 알아야 되기 때문에 관리가 어렵다.
나. 배열
==> 다수의 데이터를 하나의 이름으로 관리 가능하다.
 (배열명)
==> 특징 : 같은 데이터만 저장 가능하다.
      인덱스(첨자)로 접근 한다. ( 0부터 시작)
      배열의 크기는 배열명.length 로 알 수 있다.
      배열은 참조형이다.
      (배열명에는 위치값이 저장된다.)
      배열은 참조형이기 때문에 new 이용해서 생성한다.
 기본형도 참조형도 모두 배열로 관리가 가능하다.

 

2차원 배열일 경우

배열명 = new 데이터형[행크기][열크기]; // 열크기 생략가능

 

===학습세부사항 ===

1. this 키워드
정의 : 메모리에 올라간 자기 자신을 가리킬때.

<용도 2가지>
가. 인스턴스변수와 로컬변수와 동일하기 때문에 구별하기 위해 사용
    this.XXX 인스턴스 변수를 가리킨다.

예> String name;  // 인스턴스 변수
    public void setName(String name){  // 로컬변수
     this.name = name;
    }
나. 오버로딩 생성자를 호출할때 사용. (생성자 끼리 서로 호출)

다른 클래스에서 생성자 호출방법?
=> new 클래스명();

같은 클래스에서 오버로딩 생성자 호출방법?
this();
this(12):
용도는 중복제거 및 데이터 초기화 효율
반드시 생성자에서 사용하고, 첫 라인에서 사용해야 된다.
예>
public Student(){}
public Student(int s){
 
 this(s,null);
}
public Student(int s, String n){
 this(s,n,null);
}

2. 패키지 ( package )
용도 : 클래스 파일들을 관리할 목적으로 묶는방법.
관련된 클래스들끼리 동일한 패키지명으로 지정한다. ( 윈도우 폴더와 비슷 )

방법 :  package 패키지명;
 package 패키지명.패키지명2;
특징 : 패키지명은 유일한 도메인을 사용한다.
예> com.xxx
java 로 시작하는 패키지는 사용불가.
하나의 클래스에 한번만 지정 가능.

package com.stu;

public class Student {}

패키치가 서로 다르면 접근이 불가능하다.
import 를 사용하면 접근이 가능하다.
* 모든 API는 패키지로 제공된다.
java.
javax.
org.
따라서 API의 클래스를 사용하기 위해서는

3. import 문

용도: 패키지가 다른 클래스를 사용하기 위한 방법.

문법 : import 패키지명.패키지명2.클래스명;

특징 :
 여러번 사용 가능하다.
package com.xxx;
improt comstu.Student;
import java.util.ArrayList;
public class

4. 가변 인자 (Varargs)

용도 : 일반적인 메소드 호출시
메소드명과 argument list가 일치해야 된다.

문법:
 가. 일반 메소드
 public void set(int n){}
 변수명.set(10);

 나. 가변인자 메소드
 public void set(int ... n){} //인수의 개수가 상관없다, 배열로 관리한다.
 변수명.set(10);
 변수명.set(10,20);
 변수명.set(10,20,30);
 
5. 클래스 다이어그램

가. 클래스만 표현

student


나. 클래스 구성요소 모두 표현
* 접근지정자 4가지
public(+)
protected (#)
(default, friendly)
private (-)

 

클래스명
 변수 ==> 접근지정자 String name;
 변수명: 데이터형
 +name:String
-----------------

생성자 ==> public Student(){}
     public Student(int s, String n){}
 + 생성자명()
 + 생성자명( 변수명 : 데이터형, 변수명 : 데이터형)

메소드 ==> public void setName(String n){}
 public String getName(){}

 +메소드명(변수명:데이터형): 리턴타입
 +getName():String
 +setName(n:String)

6. 배열 (array)

* 데이터 저장 방법
가. 변수
==> 데이터 10개이면 변수 10개 필요.
    10개의 변수명을 모두 알아야 사용 가능하다.
    서로 다른 변수명을 모두 알아야 되기 때문에 관리가 어렵다.
나. 배열
==> 다수의 데이터를 하나의 이름으로 관리 가능하다.
 (배열명)
==> 특징 : 같은 데이터만 저장 가능하다.
      인덱스(첨자)로 접근 한다. ( 0부터 시작)
      배열의 크기는 배열명.length 로 알 수 있다.
      배열은 참조형이다.
      (배열명에는 위치값이 저장된다.)
      배열은 참조형이기 때문에 new 이용해서 생성한다.
 기본형도 참조형도 모두 배열로 관리가 가능하다.

다. 컬렉션(*)

* 배열 사용 방법
가. 배열 선언
데이터형 [] 배열명; 데이터형 배열명 []; ([] 대괄호 , 브래킷)
int [] num;  String [] name;

나 배열 생성
배열명 = new 데이텨형[크기];
==> 자동으로 기본값으로 설정된다.
num = new int[4];   name = new String[3];

다. 초기화
==> 인덱스로 접근

배열명[첨자] = 값;

num[0] =1;   name[0] =  "홍길동"
num[1] = 2;   name[1] =  "이순신"
num[2] = 3;   name[2] =  "유관순"
num[3] = 4;   name[3] =  "강감찬" //에러

7. 배열 생성 방법 3가지

가. new 이용
int [] num = new int[3];
num[0] = 1;
num[1] = 2;
num[2] = 3;

나. 리터럴 이용
===> 데이터형 [] 배열명 = {값1, 값2, 값3};

int [] num = {1, 2, 3};

String [] name = {"홍길동", “이순신”, “강감찬”};

Student [] stu = {
------------------------------------------------------------------

8. 이차원 배열

가. 배열선언
 데이터형 [][] 배열명;

int [][] num;  String[][] name;

나. 배열 생성

배열명 = new 데이터형[행크기][열크기]; // 열크기 생략가능

num = new int[3][2];  name = new String[2][2];

다. 초기화

num[0][0] = 1;
num[0][1] = 2;
num[1][0] = 3;
num[1][1] = 4;
num[2][0] = 5;
num[2][1] = 6;

======================================> 정방향 배열

* 비정방향 배열 ==> 열의 크기가 다르다.

가. 배열 선언

int [][]num;

나. 배열 생성 (행 크기 지정)

num = new int[3][]; //3행만 생성

다. 열 생성

num[0] = new int[3]; //1행의 3열
num[1] = new int[2]; //2행의 2열
num[2] = new int[1]; //3행의 1열

라. 초기화

num[0][0] = 1;
num[0][1] = 2;
num[0][2] = 3;
num[1][0] = 4;
num[1][1] = 5;
num[2][0] = 6;

-------------------------------------------------------------
9. 이차원 배열 생성방법 2가지

가. new

나. 리터럴

==> 데이터형 [][] 배열명 ={{값, 값, 값},{값 },{값, 값}};

int [][] num = { {1,2,3}, {4,5},{6} };

String[][] name = { {"홍길동"},{“강감찬”},{“유관순”}};

Student [][] stu = {
 {new Student(1111, "홍길동", 20) },

 {new Student(1111, "홍길동", 20),
  new Student(1111, "홍길동", 20)},

 {new Student(1111, "홍길동", 20),
  new Student(1111, "홍길동", 20),
 new Student(1111, "홍길동", 20)}
}

10. command line 파라미터

==> public static void main(String [] args) {}
==> 실행시 파라미터를 설정하면 자동으로 main메소드의 args배열로 저장이 된다.

ex) public class Test{
public static void main(String [] args) {


}//end main
}//end class

실행 :
 Java Test 값, 값2, 값3

 

 

 

 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

3일차 수업

 

1. 객체 ( objec )
주제가 바라보는 대상(사물)을 의미한다.
* 객체의 2가지 특성
a) 속성(attribut) : 객체를 표현하는 방법
b) 동작(operation): 객체의 행위를 의미 

 

2. 객체지향 프로그래밍?
-> 현실세계의 객체를 이용해서 가상세계에서 표현하는 프로그래밍
개발방법을 '객체지향 프로그래밍'이라고 한다.

현실세계 ---------------> 가상세계
객체 ------------------> 클래스
속성 ------------------> 변수 (instance variable)
동작 ------------------> 메소드

 

3. 객체 추출
어떤 어플리케이션을 하던지 필요한 객체를 추출하는 작업이 필요하다.
필요한 것만 필터링하는 작업을 '추상화(abstraction)'라고 한다. 필요없는건 제거

 

4. 클래스 ( class ) 

a) 인스턴스 변수 : 객체의 속성을 표현할 때 사용
b) 메소드 : 객체의 동작을 표현할 때 사용 , 인스턴스 변수를 관리할 때 사용한다.
     (변수에 값을 설정하거나 얻어오는 작업)
c) 생성자 : 인스턴스 변수에 값을 초기화하는 작업시 사용한다.
  

 

5. 클래스 종류 2가지

 

가. 재사용 클래스 
나. 재사용 클래스를 핸들링하는 클래스 ( handling class ) 

 

6. 객체생성 ( 인스턴스 화, 메모리 로딩 )
-> main메소드가 없는 클래스를 메모리에 올려주는 작업을 의미한다.

문법 :  

클래스명 변수명 = new 클래스명();
Student sut = new Student();

 

7. 구성요소 접근

8. 은닉화 ( encapsulation ) 

객체지향 프로그래밍 3대 특징
   가. 상속( inheritance )
   나. 다형성 ( polymorphism )
   다. 은닉화 ( encapsulation )

 

9. 메소드 ( method ) 

용도 : 인스턴스 변수 값 설정 및 얻기
문법 :
 
 public 리턴타입 메소드명(인자) {
 return 값;  //호출한 곳으로 돌아갈 때 가지고 갈 데이터
 }          반드시 값의 데이터형을 리턴타입에 저장한다.
 - 특징 :
 - 반드시 클래스 객체생성 먼저
 - 반드시 호출해야 수행된다.


   수행이 끝나면 호출한 곳으로 돌아온다.
   ( return )

 -> 메소드안에서 선언되 변수인 로컬변수는
   메소드 호출시 생성되고 메소드가 끝나면 제거되는 임시 데이터
   저장용 변수이다. ( stack 메모리 )
 

10. 오버로딩 메소드 (overloading method)

11. 메소드 종류

12. 생성자 ( Constructor )

용도 : 인스턴스 변수에 값을 맨 처음 설정하는 역할 ( 초기화 작업 )
문법 :

 

 public 클래스명(인자){}
 

특징 : 메소드와 비슷하다.
리턴타입이 없다.
반드시 이름은 클래스명으로 지정한다.
호출해야 수행되고, 끝나면 돌아온다.
모든 클래스에는 자동으로 기본생성자를 제공한다.
(==> public 클래스명(){} )

생성자를 명시적으로 제공가능하다. 
단, 생성자를 명시적으로 사용하면 기본 생성자를 제공하지 않는다.
따라서 기본생성자는 항상 명시적으로 작성하자

  

가. worker 생성자 : public 클래스명(인자){}
나. caller 생성자 : new Student(); //콜러 생성자

 

====학습 세부사항 ====

 

1. 객체 ( objec )
객체란?
-> 주제가 바라보는 대상(사물)을 의미한다.
* 객체의 2가지 특성
a) 속성(attribut) : 객체를 표현하는 방법
b) 동작(operation): 객체의 행위를 의미

2. 객체지향 프로그래밍?
-> 현실세계의 객체를 이용해서 가상세계에서 표현하는 프로그래밍
개발방법을 '객체지향 프로그래밍'이라고 한다.

현실세계 ---------------> 가상세계
*객체 ------------------> 클래스
-속성 ------------------> 변수 (instance variable)
-동작 ------------------> 메소드

*객체관계 --------------> has a, is a 관계

3. 객체 추출
-> 어떤 어플리케이션을 하던지 필요한 객체를 추출하는 작업이 필요하다.
-> 필요한 것만 필터링하는 작업을 '추상화(abstraction)'라고 한다. 필요없는건 제거

분석  --->   설계    --->     구현    --->    테스트    ---> 배치
객체추출    다이어그램      소스코드
     ( 그림 )

4. 클래스 ( class )
- 문법 :
 public class 클래스명{ 
 }
- 클래스명은 첫글자 대문자, 의미있는 명사형으로 지정한다.
- 첫글자는 영문자로 지정하고 이후에 숫자지정가능하다.
  특수문자 2개 ( _ $ )만 사용가능하다
- 반드시 클래스명으로 파일저장해야 한다. ( 클래스명 = 파일명 ) 일치해야 한다.
<구성요소 3가지>
a) 인스턴스 변수 : 객체의 속성을 표현할 때 사용
b) 메소드 : 객체의 동작을 표현할 때 사용 , 인스턴스 변수를 관리할 때 사용한다.
     (변수에 값을 설정하거나 얻어오는 작업)
c) 생성자 : 인스턴스 변수에 값을 초기화하는 작업시 사용한다.

 예> 학생관리

 학생객체 -------------------------------------> Student
 - 학번, 이름 ,주소 ---------------------------> int snum;
       String name;
       String address;
 - 동작   -------------------------------------> 메소드

5. 클래스 종류 2가지

 가. 재사용 클래스 
 - 객체관련 클래스 , main 메소드가 없다.
 - 실행이 불가능하다. --> 핸들링 클래스를 통해서 사용이 가능하다.
 예> 학생객체, 컴퓨터 객체, ...

 
 나. 재사용 클래스를 핸들링하는 클래스 ( handling class )
 - main 메소드를 지정
 - 실행이 가능하다.

6. 객체생성 ( 인스턴스 화, 메모리 로딩 )
-> main메소드가 없는 클래스를 메모리에 올려주는 작업을 의미한다.

 문법 :
 클래스명 변수명 = new 클래스명();
 Student sut = new Student();

 * stu 변수
 - 변수
 - 참조형 변수 ( reference 변수 )
   위치값을 저장하는 변수
 - Student 클래스 타입의 변수

7. 구성요소 접근
  --> 객체생성후에 접근 가능하다.

 - 인스턴스 변수 ( 멤버변수 , 클래스 멤버 )
 ==> 참조형변수.멤버변수
 예) stu.snum = 1111;
     stu.name = "수지";
     stu.address = "청주";
  - 메소드 ( 벰버 메소드 , 클레스 멤버 )
   -> 용도 : 인스턴스 변수 값 설정 및 값 얻기

 - 생성자

8. 은닉화 ( encapsulation )

   a) 접근하는 곳

   b) 접근 당하는 곳
      -> stu.name = "수지";
         따라서 직접 접근하지 못하도록 private 로 설정한다.
  private int snum;
  직접접근은 못하고 다른 방법으로 접근한다.
  ( 메소드 이용 )
      예) 달력 객체
 public class MyDate{
  
  int day;
  int month;
  int year;
 }
 MyDate d = new MyDate();
 d.day = 40; //문법적으로는 문제가 없지만 논리적으로 문제발생
 
 * 객체지향 프로그래밍 3대 특징
   가. 상속( inheritance )
   나. 다형성 ( polymorphism )
   다. 은닉화 ( encapsulation )


9. 메소드 ( method )

 - 용도 : 인스턴스 변수 값 설정 및 얻기
 - 문법 :
 
 public 리턴타입 메소드명(인자) {
 return 값;  //호출한 곳으로 돌아갈 때 가지고 갈 데이터
 }          반드시 값의 데이터형을 리턴타입에 저장한다.
 - 특징 :
 - 반드시 클래스 객체생성 먼저
 - 반드시 호출해야 수행된다.
   수행이 끝나면 호출한 곳으로 돌아온다.
   ( return )

 -> 메소드안에서 선언되 변수인 로컬변수는
   메소드 호출시 생성되고 메소드가 끝나면 제거되는 임시 데이터
   저장용 변수이다. ( stack 메모리 )
 <용도 2가지>
a) 인스턴스 변수에 값을 설정
- setter 메소드라고 한다.
- 메소드명은 set변수명(첫글자 대문자)으로 지정한다.
  예) String name;
      setName
      setSnum
      setAddress
b) 인스턴스 변수 값을 얻기
- getter 메소드라고 한다.
- 메소드명은 get변수명(첫글자 대문자)으로 지정한다.
  예) String name;
      getName
      getSnum
      getAddress
- 핸들링 클래스에서 값을 얻는다.

 아키텍쳐
 
 TestStudent                                Student
 
 0.Student 객체생성
  
  1. 호출              Stirng name;
  -------------------> public 리턴타입 getName(인자){

     return name;
         }
  2. 리턴
  <------------------- 

 - 호출방법
   가. 객체생성
    Student stu = new Student();

   나. 메소드 호출
    참조형변수.메소드명(인자);

    예) stu.getName();
 stu.getAddress();
 stu.getSnum();
  
 - 메소드 호출 방법
 : 반드시 메소드명과 인자(파라미터, argument)
   리스트가 일치해야 된다.
 : 인자 리스트
 갯수
 데이터형
 순서

 public void a(int x){  }
 public void b(String x){  }
 public void c(int x){  }

10. 오버로딩 메소드 (overloading method)
-정의 : 같은 클래스내에 동일한 이름의 메소드가 여러개 설정 가능하다.
같은 이름의 여러 메소드를 '오버로딩 메소드'라고 한다.

- 규칙 : argument list가 반드시 달라야 된다.

- 이유?
1) 재사용성
2) 서로다른 메소드를 관리하는 것보다 하나의 이름으로 관리하는것이 쉽다.

11. 메소드 종류

가. worker 메소드
    -> 일반적으로 메소드 지칭한다.
    -> public 리턴타입 메소드명(인자){  }
    -> 종류 2가지
       -setter 메소드
 public void set변수명(인자, 인자2){ }
       -getter 메소드
 public 리턴타입 get변수명(){
 return 값;
 }
나. caller 메소드
-> worker 메소드를 호출하는 메소드를 의미한다.
-> 객체생성후에 사용 가능하다

 예) Student stu = new Student();

 stu.setName("곽보근"); // caller 메소드 
 stu.setAddress("하복대");

 int s = stu.getSnum(); // getter 메소드
* 같은 클래스에서는 그냥 호출하면 된다.

예) getName();

12. 생성자 ( Constructor )

 - 용도 : 인스턴스 변수에 값을 맨 처음 설정하는 역할 ( 초기화 작업 )
 - 문법 :

         public 클래스명(인자){}
 - 특징 : 메소드와 비슷하다.
   리턴타입이 없다.
   반드시 이름은 클래스명으로 지정한다.
   호출해야 수행되고, 끝나면 돌아온다.
   모든 클래스에는 자동으로 기본생성자를 제공한다.
   (==> public 클래스명(){} )

   생성자를 명시적으로 제공가능하다.
   단, 생성자를 명시적으로 사용하면 기본 생성자를 제공하지 않는다.
   따라서 기본생성자는 항상 명시적으로 작성하자

   가. worker 생성자 : public 클래스명(인자){}
   나. caller 생성자 : new Student(); //콜러 생성자

13. 오버로딩 생성자
-> 하나의 클래스내에 동일한 생성자가 여러개 존재 가능하다.
-> 규칙 : argument list가 반

* 은행 프로젝트

- 고객, 직원, 계좌, 은행

- 계좌 객체 -----------------> Account
 : 계좌번호
 : 비밀번호
 : 잔액     -----------------> double balance;

 : 입금     -----------------> deposit 메소드
   출금     -----------------> withdraw 메소드

 : 생성자

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

2일차 수업 ( Scanner 문) 

 

 

<오늘 배운 내용->  하단 내용 참조 

 

1. 데이터의 형변환

a) 자동 형변환

b) 강제 형변환 

 

2. 연산자

- 대입 연산자

- 증감 연산자

- 논리 연산자

- 3항 연산자 : 데이터형 변수명 = (조건식)? 1 : 2;

 

int a12 = ( a1 > a2 ) ? a1 : a2;
int top = ( a12 > a3 ) ? a12 : a3;

 

-> 조건식이 true 이면 값1을 취하고, false 이면 값2을 취한다.
-> 1에 지정한 가능한 데이터는 숫자, 문자, 문자열 모두 가능하다.

 

3. 문장 ( statement )

 

- 주석문 : 설명을 위한 문장으로 프로그램이 실행 하지 않는 문장

   한줄 주석 : //

   여러줄 주석 : /* */

 

- 조건문 : 여러 조건들을 해결하기 위한 문장

a. 단일 if

b. if - else

c. 다중 if

d. switch

 

- 반복문 : 반복을 하기위한 문장

a. for

b. while

c. dowile

 

4.  Scanner 사용하기 (C언어의 scanf() 역할)

 

Scanner 클래스 사용
import java.util.Scanner;  -> import 받음
Scanner scan = new Scanner( System.in );

 

예제 코드) 입력받는 두 숫자를 곱하기

import java.util.Scanner;

public class Test10 {

public static void main(String[] args) {
int a=0, b=0;
Scanner scan = new Scanner( System.in ); //Scanner 사용에 있어 먼저 선언
  
System.out.println("가로 입력 :");
a = scan.nextInt(); // a라는 변수를 입력받음
System.out.println("세로 입력 :");
b = scan.nextInt(); // b는 변수를 입력받음

if(a<=0 || b<=0){

System.out.println("길이는 0이하일 수 없습니다.");
return;} // 0이하의 숫자는 입력을 제한 하는 부분

System.out.println("입력하신 두수의 곱은 : " + a*b);
}

}

 

==2일 째 오늘 학습 내용

1. 데이터 형변환
==> 데이터형이 프로그램 실행중에 변경됨을 의미한다.
==> 특징 :
 -같은 종만 변환된다. ( 수치형 )
 -기본형 + 참조형 모두 데이터 형변환이 발생된다.
 

 가. 자동 형변환 ( promotion )
  - byte > short > int > long > float > double
    char > int    ==>char 연산이 가능하다.

  - 큰 데이터형 = 작은데이터형;

  - int 보다 작은 정수형을 연산하여 나온 결과의 데이터형은 자동으로 int 로 변환된다.
  예 >        short s = 10;
   short s2 = 10;
   short s3 = s+s2  //이게 안됨 int로 변환됨

  - 큰데이터형과 작은데이터형을 연산하면 큰데이터형으로 형변환된다.

  예 > byte b =10;
       int i = b;  //byte 1바이트 int 4바이트라 수용가능함. 같은종


 나. 강제 형변환( type casting )

  : 작은데이터형 = 큰데이터형;  //에러발생
  따라서 강제적으로 형변환해야 된다.

  :( 변환활 데이터형 ) 형변환 연산자 사용.
  예 > int i=10;
       short s = (short)i;

 

연산자 ( operator )
 가. 산술연산자
  + ( 더하기 )
  - ( 빼기 )
  * ( 곱하기 )
  / ( 나누기, 몫 )
  % ( 나머지 )
<대입 연산자>
: 값을 대입하는 연산자

a = b  b는 a에 대입(저장)
a += b a와 b를 더해서 다시 a에 대입한다.
a -= b a와 b를 빼서 다시 a에 대입한다.
a *= b a와 b를 곱해서 다시 a에 대입한다.
a /= b a와 b를 나누어서 다시 a에 대입한다.
a %= b a와 b를 나머지를 다시 a에 대입한다.


<증감 연산자>
: 증가 연산자, 감소 연산자
1) 증가 연산자 : ++
-> 값이 1 증가한다.
++변수 : 전치 -> 먼저 증가하고 나중에 할당
변수++ : 후치 -> 먼저 할당하고 나중에 증가

2) 감소 연산자 : --
-> 값이 1 감소한다.
--변수 : 전치 -> 먼저 감소하고 나중에 할당
변수-- : 후치 -> 먼저 할당하고 나중에 감소


<논리 연산자>
: 논리값으로 연산이 발생이 되고 결과는 논리값으로 나온다.

 a. && ( and 연산자 ) : 앰퍼샌트 (&)

 true && true   -> true
 true && false  -> false
 false && true  -> false
 false && false -> false

 * & vs &&
 &&는 앞의 결과가 false 이면 뒤의 결과를 체크하지 않는다.
 & 는 앞의 결과에 상관없이 항상 뒤의 결과를 체크한다.
 
 b. || ( or 연산자 )

 true || true   -> true
 true || false  -> true
 false || true  -> true
 false || false -> false

 *||(short circuit) vs ||
 || 는 앞의 결과가 true 이면 뒤의 결과를 체크하지 않는다.
 | 는 앞의 결과에 상관없이 항상 뒤의 결과를 체크한다.

 c. ! ( not 연산자 )

 !true  -> false
 !false -> true 


<3항 연산자>
: 데이터형 변수명 = (조건식)? 값1 : 값2;

-> 조건식이 true 이면 값1을 취하고, false 이면 값2을 취한다.
-> 값1에 지정한 가능한 데이터는 숫자, 문자, 문자열 모두 가능하다.

<instanceof 연산자>
- 변수의 데이터형을 알아 보려고 할때 사용 (참조 데이텨형만 가능 int 같은거안됨)
- '변수명 instanceof 데이터형' 으로 사용. 해석 : 변수명이 이 데이터형이야?
- 결과는 논리값


문장 ( statement )

가. 실행문
    : 순차문
      ->

나. 비실행문
    : 자바가 실행하지 않는 문장을 의미한다.
      개발자를 위한 문장이다.
   
    : 주석문 이라고 한다.
    : // 한줄 /* */ 여러줄


조건문

a. 단일 if 문

 문법 :
 
 문장0;
 if(조건식){
 문장1;
 }
 문장2;

-> 조건식이 true 인 경우에만 문장1 실행.

b. if - else 문
 
 문법 :
 
 문장1;
 if(조건식){
 문장2
 }
 else{
 문장3;
 }
-> 조건식이 true 면 문장2 실행하고 false 면 문장3을 실행한다.

c. 다중 if 문 -> 비교할 조건식이 여러개인 경우에 사용

 문법 :
 문장1;
 if(조건식){
 문장2
 }
 else if{
 문장3;
 }
 else if{
 문장4;
 }
 else{
 문장5;
 }

d. switch

 문법 :
 switch(정수식) {
  case 값1 : 문장1; break;
  case 값2 : 문장2; break;
  case 값3 : 문장3; break;
  default : 문장4;
 }

-> break; 는 스위치문을 빠져나올 때 사용
-> 정수식을 만족하는 case 값을 실행
-> 용도는 if-else 문과 비슷하다.
-> 정수식에 가능한 데이텨형은 byte, short, int, char 4가지가 가능하다.

e. 반복문 : 하나의 문장을 여러번 수행 가능한 방법이다.
     항상 3가지 정보 필요 ( 반복회수 = '초기값' , '증갑연산자' , '조건식' )
- for 문
문법 :

 for( 초기값; 조건식; 증감식 ){
 문장 1;
 }
=> 초기값>조건식>문장>증감식>조건식>문장>증감식>조건식>문장>증
감식>조건식(false)> for문을 빠져나온다.

- while 문
문법 :

 초기값;
 while(조건식){
 문장;
 증감식;
 }
=> 예측이 힘든 경우에 사용

*무한루프
 while(true){
 문장;
 }
 
 boolean result = true;
 while(result){
 문장;
 if(조건식) result = false;
 }

- dowile 문
문법 :

- 향상된 for 문
-> 배열 ,컬렉션 ( 대량의 데이터에 저장용)에 저장된 데이터를 반복적으로 열어올 때 사용된다.
문법 :
  for( 데이터형 변수명 : 배열명 ){
 }

반복문에서 사용하는 2가지 키워드

break 문 : 가까운 반복문을 빠져 나온다.
예)
 while(조건식){
  for(){
  if(조건) break;
  }
  if(조건) break;
 }

continue 문 : 블럭안의 모든 문장을 반복하지 않고 특정 조건이 일치하는 경우 skip 할 목적으로 사용

예)
 while(조건식){
 문장1;
 문장2;
 문장3;
 }

< 키보드 입력 >

Scanner 클래스 사용
import java.util.Scanner;
Scanner scan = new Scanner( System.in );

예)
import java.util.Scanner;

public class Test10 {

 public static void main(String[] args) {
  
  int a=0, b=0;
  
  Scanner scan = new Scanner( System.in );
  
  System.out.println("가로 입력 :");
  a = scan.nextInt();
  System.out.println("세로 입력 :");
  b = scan.nextInt();
  
  if(a<=0 || b<=0){
  System.out.println("길이는 0이하일 수 없습니다.");
  return;
  }
  System.out.println("사각형의 넓이는 : " + a*b);
 }

}

 

 

직장을 다니면서 투잡(알바/부업)으로 월급 많큼 수익을 얻고 싶으시다면  

아래 접속하셔서 상담받아 보실 수 있습니다. (믿음의 재택부업회사)

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,


1일차 수업 ( Java 개발환경 ) 


<오늘 학습 내용> -하단 내용 참조
 

1. 개발 환경 구축 (JDK ,IDE, Database, Tomcat)

 

2. 자바 개발 플랫폼 3가지

-  Java SE  (Standard Edition)

-  Java EE  (Enterprise Edition)

-  Java ME  (Micro Edition)

 

3. Java 어플리케이션 개발순서

1) 소스코드 ( 영문자 이용 )
2) 컴파일 작업
3) 클래스파일 실행

 

4. Java 에서 값 출력

값(데이터)을 리터럴(literal) 이라고 한다.
값의 종류 (데이터 종류) : 수치 데이터, 문자 데이터, 논리 데이터, 날짜 데이터

가. System.out.println(값);
나. System.out.print(값);
다. System.out.printf( "형식지정자" , 값 );

 

형식지정자 = %d , %s, %f 등등

 

5. 식별자 설명 및 종류

 

6. Java의 2가지 데이터형

- 기본 데이터형 : 정수형, 실수형, 문자형, 논리형

- 참조 데이터형 : 위 기본 데이터형의 8가지를 제외한 모두

 

7. 변수 (variable) 설명 및 선언과 사용방법

 

8. 변수의 종류

- 로컬 변수 ( local 변수 )

- 인스턴스 변수 ( instance 변수 )

- static 변수 ( class 변수 )


 

====하단 내용 참조  ====

 

 

환경설정

1. JDK ( Java Development Kit )
http://jave.oracle.com 에서 다운.

- C:\Program Files\Java 에 JDK 폴더 설치 JRE 폴더 설치

2. 개발툴 ( Development Tool : IDE 툴 )
http://www.eclipse.org 에서 다운.
- 다운받고 압출풀면 됨. 작업환경인 perspective 선택.

3. 데이타베이스 - 관계형
http://www.oracle.com
- 데이터를 관리하기 위한 소프트웨어. (DBMS)
- oracle, MySQL, DB2, MS-SQL, Sybase..
- 설치시 한글경로로 설치하면 안됨.
4. tomcat 컨테이너
http://jakarta.apache.org

* 자바 개발 플랫폼 3가지
-> 어떤 환경에서 실행되는 프로그램을 개발하는가?
1) java SE (Standard Edition) 
- 일반적인 PC 환경
예) 채팅. XXX관리(학생관리, 책방, 비디오가게...)
다룰 내용 : 기본 자바문법, 네트워크, GUI 환경

2) java EE (Enterprise Edition)
- 서버 환경 , 웹 개발( JSP/Servlet 기술 이용)
- Java SE 설치가 기본
예) 쇼핑몰..

3) java ME (Micro Edition)
- 소규모의 device 환경
- 모바일 및 임베디드 기반 에플리케이션

* 시스템 구조

자바프로그램 실행 + API(라이브러리 + 컴파일러(javac.exe) +
인터프리터(java.exe) + 많은 명령어들
----------------------------
JVM ( Java Virtual Machine )
----------------------------
OS ( window 7 )
----------------------------
h/w

JRE( Java Run time Environment)
- 자바프로그램의 실행환경
- JVM + API


* 자바의 압축파일
- *.jar
- API의 형태 : rt.jar -> C:\Program Files\Java\jdk1.7.0_25\lib
( 시스템이 개발자에게 도움을 주기 위해서 제공해준 클래스들의 압축파일)
- rt.jar 의 소스파일은 src.zip -> C:\Program Files\Java\jdk1.7.0_25
- API 문서 ( 어떤 클래스파일들이 있는지 메뉴얼 )
=> html 형식으로 제공된다.
http://docs.oracle.com/javase/7/docs/api/

* 자바 어플리케이션 개발순서

1) 소스코드 ( 영문자 이용 )
- *.java 확장자로 저장한다.
예) Test.java
2) 컴파일 작업
- javac.exe 컴파일러 사용
예) javae Test.java   => Test.class 생성 (클래스파이르 , bytecode 라고 한다.)

3) 클래스파일 실행
- java.exe 인터프리터 사용.
예) java Test

* 데이터관리 방법 종류
- 계층형
- 네트워크형 (망형)
- 관계형 ( Relational Database )
- 객체형
- no-sql, R (대용량 데이터베이스 ) -> facebook 같은 형태


<helloWorld 출력하기>

1. java perspective 선택
2. java project 생성
   File > New > java project 생성
3.

<값 출력 방법>
- 값(데이터)을 리터럴(literal) 이라고 한다.
- 값의 종류 (데이터 종류)

수치 데이터 : 정수형,실수형
문자 데이터 : '남' '여' 한 글자를 표현하고 반드시 ' '(홀따옴표, 싱글쿼테이션) 을 사용해야 한다.
       문자열은 " " (쌍따옴표, 더블 쿼테이션) 으로 표현한다.
날짜 데이터
논리 데이터 : 참/거짓을 표현한다.
       소문자 true, false 값을 사용한다.

가. System.out.println(값);
나. System.out.print(값);
다. System.out.printf( "형식지정자" , 값 );
*형식지정사
정수 : %d
실수 : %f
문자 : %s

클래스 파일명

public class HelloTest {

 public static void main(String[] args) {
 }
}

- HelloTest 가 클래스명이 된다.
- 클래스명은 첫글자는 대문자로 지정하고, 의미있는 명사형으로 지정한다.
- 클래스명은 반드시 저장할 파일과 일치해야 된다.
  ( HelloTest.java )

3. 프로그램의 시작하는 위치 ( starting point )
main 메소드
반드시 다음과 같은 형식으로 지정해야 된다.
public static void main(String[] args) {}

4. 식별자 ( identifier )
-> 단어, 즉 이름을 의미한다.
( 자바코드내에서 보여지는 단어를 의미한다. )

식별자 종류 2가지
1) 시스템이 지정한 식별자
키워드, 예약어 ( reserved ) : public , class, static, main, void,...

2) 개발자가 지정한 식별자
- 클래스명 : 첫글자 대문자, 의미있는 명사형
- 변수명 : 모두 소문자, 의미있는 명사형
- 메소드명 : 모두 소문자, 의미있는 동사형

예약어는 시스템이 미리 지정한 이름이기 때문에 개발자가 사용 불가.
영문자, 숫자, 특수문자 사용가능하다. 단 첫글자는 영문자로 지정하고 이후에 숫자 사용 가능하다.
특수문자는 2가지 문자만 가능하다.( $, _ )
대소문자를 구별한다. 길이제한이 없다.

데이터 형 ( 데이터 타입, data type )
* 현실세계 -------------> 가상세계
-데이터종류
수치
문자
날짜
논리

<자바의 데이터형 2가지>
가. 기본 데이터형 ( Primitive Data Type : PDT )
- 정수형 : byte, short, int, long
- 실수형 : float, double
    float 표현식 : 10.121F , 3.14f
    doyble 표현식 : 17.12D , 3.22d , 123.23
- 문자형 : char
           표현방식은 ''사용해서 표현 '남'
- 논리형 : boolean
    표현방식은 true/false 이다.
나. 참조 데이터형 ( Referentc Data Type : RDT )
- 8개의 기본형이 아닌 나머지 모두.....
- 대표적으로 3가지 ( 클래스, 인터페이스, 배열 )
- 문자열은 기본형이 아니다. 참조형이다. 표현방법은 "" 사용한다.
  문자열은 string 형을 쓴다.


- 클래스명은 첫글자는 대문자로 지정하고, 의미있는 명사형으로 지정한다.
- 클래스명은 반드시 저장할 파일명과 일치해야 된다.
 ( HelloTest.java )

 

변수 ( variable )
- 용도 : 데이터 저장
 가. 변수선언 ( 메모리에 데이터 공간 생성하는 작업 )

 데이터형 변수명;

기본형 변수 (나이,키,몸무게)       참조형 변수 (이름, 주소)
                                   : 항상 4byte로 저장
int age;                           String name;
float height;      String address;
double weight;
      
 나. 값 할당 ( 초기화 작업 : 변수에 값을 처음 넣어주는 작업 )
 
 변수명 = 값;

age = 25;      name = "곽보근";
height = 170.4;      address = "청주";
weight = 63;

가 + 나 작업을 한꺼번에

int age = 20;      String name = "곽보근";
float height = 170.4;     String address = "청주";
double weight = 63;

==> 변수명은 전부 소문자, 의미있는 명사형으로 지정한다.
-> 변수명은 식별가능해야 되기 때문에 중복불가.
-> 가본형변수에는 실제값이 저장된다. 참조형 변수에는 실제값이 지정된 위치값이 달려진다.

7. 변수의 종류 3가지
==> 변수 선언위치에 따른 분류

가. 로컬변수 ( local 변수 )
- 메소드 안에서 선언
- 메소드 호출 생성 ~ 메소드 끝나면 제거.
- stack 메모리에 생성
- 사용전에 반드시 초기화해야 된다. ( 에러발생 )


나. 인스턴스 변수 ( instance 변수 )
- 메소드 밖에서 선언
- 객체생성하면 변수생성 ~ 객체가 소멸되면 변수제거
  ( new 이용해서 객체생성한다. )
- heap 메모리에 생성
- 초기화하지 않으면 자동으로 기본값으로 설정된다.
예) int num;


다. static 변수 ( class 변수 )
- 메소드 밖에서 선언
- 프로그램 시작시 변수 생성 ~ 프로그램 종료시 변수 제거
- method area ( class area ) 메모리에 생성
예) static int num;

 

 

직장을 다니면서 투잡(알바/부업)으로 월급 많큼 수익을 얻고 싶으시다면  

아래 접속하셔서 상담받아 보실 수 있습니다. (믿음의 재택부업회사)

 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,


[MySQL] select 된 데이터 update 하기 

 


SET @a =0

update '테이블명' set 컬럼명 = concat('11-', (@a := @a +1) + 1000)
WHERE exam_school = '서원대학교'
AND mb_sex = '남자'
AND area = '서울'
ORDER BY name1;

 

설명 : 먼저  @a 라는 변수에 0 이라는 값을 주고

 

concat 을 이용하여 선택된 컬럼명에 11-1001 부터 선택된 조건의값을 업데이트 한다.

 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

 

 [PHP] MySQL DB 연결방법
 


PHP 와 MySQL DB의 조합은 ...거의 바늘과 실의 조합 과같을정도로 자주사용되는 구조이다.

 

DB를 연결하려면 아래와 같다.

 

<?

 ////데이터베이스 연결 계정 정의

 

 $db_hostname="localhost";     //서버명
 $db_username="";          //계정아이디
 $db_password="";       //계정 암호
 $dbname="";                 // 데이터베이스 이름
 //// 데이터베이스 연결 ////
 $conn=mysql_connect($db_hostname, $db_username, $db_password);
 mysql_select_db($db_username, $conn);

 

?>

 

 

직장을 다니면서 투잡(알바/부업)으로 월급 많큼 수익을 얻고 싶으시다면  

아래 접속하셔서 상담받아 보실 수 있습니다. (믿음의 재택부업회사)

(회원가입을 하시면 편리한 시간에 자세히 설명해드립니다)

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,


 Servlet 및 JSP를 이용한 게시판,  하이브리드 웹개발  

 

1. 반드시 알고있어야 하는 API

가. HttpServlet
==> 서블릿을 만들때 상속 받는다.
==> 클라이언트가 요청가능하다.
==> 한번만 생성

 

나. HttpServletRequest
==> 클라이언트가 요청시 매번 생성한다.
   - 폼데이터 얻기(파라미터)      request.getParameter(key)
   - 한글로 인코딩                     request.setCharacterEncoding("euc-kr");
   - 바인딩
   - 포워드
     RequestDispatcher dis = request.getRequestDispatcher(target);
     dis.forward(requset, response);

 

다. HttpServletResponse
==> 클라이언트가 요청시 매번 생성한다.
   - MIME 설정                response.setContentType("text/html;charset="euc-kr")
   - IO 얻기                     PrintWriter out = response.getWriter();
   - redirect 얻기              rsponse.sendRedirect(target);

 

라. ServletConfig
==> 서블릿당 한개씩 생성 ( 서블릿을 관리 )
   - 초기화 파라미터 얻기  getInitParameter(key)
   - ServletContext 얻기    getServeltContext()

 

마. ServletContext
==> 웹어플리케이션(컨텍스트)당 한개씩 생성
    ( 컨텍스트 관리 )
   - 컨텍스트 파라미터 얻기    getInitParameter(key)  - 중요
   - 바인딩                           ctx.setAttribute(key,value)    - 중요
   - 파일읽기접근                  ctx.getResourceAsStream(path):InputStream
   - 로그기능                        ctx.log(값)

 

바. HttpSession

=> 로그인, 장바구니 정보를 관리하기 위한 매커니즘이다.
=> 기본적으로 웹 브라우저와 동일하다.하지만 보안때문에 계속 유지시키지 않고 일정시간

    (기본 30분)이 지나면 제거시킨다.

 

 

2. Servlet의 LifeCycle

 

1) init 메소드

처음 생성될 때 , 단 한번만 호출되무로 초기화 작업시 사용된다.

 

2) service 메소드

클라이언트가 요청할 때마다 호출되므로 원하는 독적인 처리 작업시 필요

예) doGet, doPost

 

3) destory 메소드

서블릿 인스턴스가 웹 컨테이너가 제거될 때 호출된다. init 메소드에서 구현했던

초기화 작업을 반납처리하는 작업 시 주로 사용

 

3. 세션 관리 (  session tracking )
- 클라이언트와 서버간의 연결을 유지하는 방법.

- HTTP 프로토콜의 메커니즘
           
                               요청
  클라이언트 ---------------------->  서버 ( 실행 )
                 <----------------------
                               응답
 
 마지막으로 클라이언트와 서버간의 연결이 close된다.

 

이유는 계속 연결이 유지되면, 유지되는 자원관리를 서버가 담당해야 되는데..
동시적으로 접속하면 관리가 안되기 떄문이다. 결과적으로 이전 페이지에서 작업했던 정보들이 다음 페이지에서 확인이 불가능하다. 실제로 서비스되는 웹사이트들은 정보가 유지되는데 이것은 세션관리를 했기 때문이다.
           
- 세션관리?
==> 각 페이지마다 필요한 데이터를 공유하는 방법이다.

가. 세션
    ==> 공유 데이터를 서버에 저장하는 방법.
    ==> 예> 로그인 , 장바구니

나. 쿠키
    ==> 공유 데이터를 클라이언트에 저장하는 방법.
    ==> 예> 자동 로그인, 자주봤던 상품 보여주기


4. HttpSession 을 이용한 세션처리

- tomcat 컨테이너(서버)에 저장하는 방법으로 세션관리. 세션(session) 연결을 의미한다.

 

가. 저장공간( 세션영역 ) 생성

       HttpSession session = request.getSession();

       - getSession()
       - getSession(true)
       =====================> 세션(공간)이 있으면 재사용하고
                                         없으면 새로 생성한다.
       =====================> 처음 공간을 생성해야 되는
                                         코드에서 사용한다.
       예> 로그인 처리하는 서블릿
       - getSession(false)
       =====================> 세션(공간)이 있으면 재사용하고
                                         없으면 null 리턴.

       =====================> 생성된 세션을 사용하는 컴포넌트에서
                                         사용한다.


 나. 세션 사용

        - getSession()
        - getSession(true)
        =====================> 세션을 처음 만드는 컴포넌트에서 사용.

        - getSession(false)
        =====================> 생성된 세션을 사용하는 컴포넌트에서 사용.

 

* 원하는 공유데이터 저장
session.setAttribute(key, value )
session.getAttribute(key)

 

다. 소멸 ( 제거 )

==> 기본적으로 웹 브라우저를 종료하면 제거된다.웹 브라우저를 종료하지 않아도 기본 30분이

      지나면  제거된다.


==> 자바코드로 제거하는 방법
==> 세션(공간)이 제거되는 방법이다.

 

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,