Java_09 Java 2011. 11. 3. 17:19

* 상속

- 이미 작성되어진 클래스를 그대로 물려받고 필요부분을 수정해서 새로운 클래스로 만드는 것

 



- 클래스에서는 다중 상속이 지원 안된다
  · 두개이상은 안된다. 반드시 1개만 상속 가능하다
  · C언어는 된다 ;ㅅ;



* 접근제어자
  · private : 클래스내에서만 접근가능 (하위클래스도 접근불가)
  · protected : 동일패키지, 하위클래스에서 접근가능(하위클래스는 패키지가 달라도 접근가능)
  · public : 어디에서나 접근 가능
  · default (명시하지 않는 경우, friendly) : 동일 패키지만 접근가능(하위 클래스도 동일패키지가 아니면 접근 불가능)
  · 접근우선순위 : public > protected > default > private


* Override 

주석은 컴파일 하면 사라지지만 컴파일해도 사라지지 않는 메타정보
재정의를 뜻하며 이런 것을 다형성이라 한다.
부모 클래스 메소드를 사용하되 기존의 메소드에 수정사항이 필요하여 다시 정의 한다 보면 된다.
오버라이딩(Overriding)에는 반드시 상속관계가 있고, 접근제어는 크기가 같아야 하며 메소드원형, 이름,
인수는 같아야 한다.
@Override로 표기하며 생략해도 되지만 재정의라는 것을 알리기 위함으로 표시 된다.

ex)
class A_class {
         :
public void print() { }
}
class B_class extends A_class {
         :
public void print() { } // 재 정의(Overriding) : 상위 클래스의 메소드를 재정의
public int print(int a){ } // 중복 정의(상위 클래스의 메소드와는 무관)
public int print() { } // 오류
}


- 개념정리 *-(파일첨부)
 

[중간 소스 생략 Demo:super / Exam:sub]
class Exam extends Demo{.....
[중간 소스 생략]
Exam ob1=new Exam();  // 하위 클래스(Exam)안에 변수에 메모리를 할당하고 ob1에 대입

ob1.write();  // 부모클래스와 하위클래스 모두 갖고 있는 메소드: 하위클래스 값 우선
ob1.print();  // 부모클래스에만 있는 메소드: 부모클래스 값 우선
ob1.output();  // 하위클래스에만 있는 메소드: 하위클래스 값 우선
// 하위클래스에서 하위클래스 값만 호출할 때 변수를 부모클래스의 값으로 대입하여 부모클래스의 값을
// 넣을 수도 있다. ex) System.out.printf("sub output : %d %d %d %d\n", a,b,c,super.b);

System.out.print("ob1.b:"+ob1.b);  // 변수 접근
// b의 값은 부모에도 있는 값 : 하위클래스에도 초기화된 값이 있다면 하위클래스 값 우선

ob1.a=50;  // 자식은 부모의 protected값에 접근 가능 : a를 가리키고 있던 값은 부모클래스 뿐이었으므로
// 방은 1개 → a의 값 자체를 바꾸지만 주소값은 같다.
ob1.write();  // 위와 같이 하위클래스 값 우선이나 a의 값만 50으로 초기화 된 값 출력
ob1.print();  // 상동
ob1.output();  // 상동


- 개념정리 *-업캐스팅 : 부모클래스의 객체는 자식클래스의 객체를 가리킬 수 있다.
메소드 주소값만 가져오고 사용은 부모속성
업 캐스팅 시 캐스팅 소스 생략 가능

Demo ob2=ob1;  // Demo ob2=(Demo)ob1;
// ob1(하위클래스 Exam)의 값을 부모클래스인 Demo가 가리키며 ob2에 그 값을 저장
ob2.write();  // 둘다 있는 메소드: 자식의 메소드를 호출하지만 위에서 a의 값을 바꿨고 자식클래스에
// 가보니 b값도 200으로 초기화 되어 있고 c값은 자식 또한 부모의 값을 쓰고 있으므로 c의 값은 자신의 값
ob2.print();  // 부모클래스만 있는 메소드 : 위에서 바꾼 a값만 따르고 나머지는 부모자신의 값
// ob2.output(); // 자식만 있는 메소드 : 컴파일오류(상위클래스에서는 하위클래스의 멤버 접근불가)
System.out.println("ob2.b:"+ob2.b);  // 변수 접근
// 메소드와 다르게 super클래스의 멤버 접근. 하위클래스 멤버 접근이 불가여서...?


- 개념정리 *-다운캐스팅 : 업클래스 후 다시 원래의 값으로 돌아올 때 사용
반드시 캐스팅 소스를 붙여야 한다.

Exam ob3=(Exam)ob2; // 업캐스팅에서 (형)을 생략 가능했던 것과는 상반
// 자식클래스가 부모클래스를 가리키고 있는 ob2의 형변환을 한고 그것을 ob3에 대입
ob3.write(); // 둘다 있는 메소드 : 부모의 메소드ob2를 호출하지만 ob2는 ob1을 가리키고 있으므로
// 원래의 값인 자식클래스의 값이 되지만 a의 값은 위에서 재 초기화한 값50이 들어가고 b값도
// 재 초기화한 값200이 들어간다
ob3.print();  // 부모만 있는 메소드 : 위처럼 본래의 값으로..
ob3.output(); // 자식만 있는 메소드 : 상동
System.out.println("ob3.b:"+ob3.b);
// 원래의 b값 출력


- 개념정리 *-런타임 오류, 부모가 있다 해서 꼭 자식이 있는 법은 아니다. 메모리 할당 문제...

Demo dd=new Demo();
Exam ee=(Exam)dd;
  // 이부분은 아직도 좀 이해가 안감 @_ @a


* 인스턴스 변수(&메소드)와 클래스 변수(&메소드)의 접근(==호출?)

- 인스턴스 변수 호출 → 호출예가 뭐가 있을까요......ㅡ.ㅡa
  · 객체를 생성해야 접근가능 → ex) Test ob=new Test
  · heap메모리 할당
ex) public int a=10;

- 클래스 변수 호출 → System.out.println("b:"+Ex.b);
  · 언제든지 접근 가능
  · static메모리 할당(정점영역)
  · 클래스가 로딩되는 순간 메소드 영역에 메모리 확보(한번만)
  · 객체를 생성하지 않고 바로 접근하여 사용 가능
  · static이 들어간건 클래스변수
ex) public static int b=20;

- 인스턴스 메소드 호출 → ob=new Ex();  ob.write();
  · 객체를 생성해야 접근 가능
ex) public void write(){ }

- 클래스 메소드 호출 → Ex.print();
  · 객체를 생성하지 않아도 접근 가능
public static void print(){ }


* 용어 정리
- final
  · 메소드에 final이 붙으면 override(재정의)를 할 수 없다.
    ex) public final int a=10;  public final b;  public static final int c=20;

- final : 프로퍼티에서 final을 붙이면 단한번만 초기화가 가능하며 초기화 이후에는 값을 변경할 수 없다.

- super() : 부모클래스 생성자 호출, 실행문보다 먼저 위치해야 한다.
   인자가 있는 생성자 호출시 괄호안에 인자를 넣어주고 없을시 생략가능하다.

- extends : 부모클래스와의 상속을 맺는 키워드(하위클래스에서 사용)
   class 클래스이름 extends 상위클래스이름

- equals
  · Object equals 메소드는 주소 비교 : 이 메소드를 재정의 하여 사용할 수 있다.
                                               :
- instanceof 관계연산자
추후 내용 추가.. 현재 머리에 없음..

- static
추후 내용 추가.. 현재 머리에 없음..

- Singleton
추후 내용 추가.. 현재 머리에 없음..

- Object 클래스
이것도...= _ =

- GC 가비지컬렉터.. 

- 초기화 블럭..

- 비정형인자..

'Java' 카테고리의 다른 글

간단 용어 정리..  (0) 2011.12.19
문제...자바..  (0) 2011.11.06
Java_09  (0) 2011.11.03
Java_08  (0) 2011.11.02
Java_07  (0) 2011.11.01
Java_06  (0) 2011.10.31
Java_07 Java 2011. 11. 1. 17:19

* class (클래스) - 개념 잡기


① : Ex클래스내에 인스턴스 변수의 num1,num2값을 e1이 가르키도록 주소값을 담아 메모리를 할당한다(e2에도 동일)

② : *A의 set()이라는 메소드를 호출하여 10과 5를 전달

*A : ②에서 받은 10,5의 값을 num1, num2에 대입하고 값을 반환 하지 않고 내부의 *B의 변수에 저장

③ : e1(Ex클래스)내에 add()라는 메소드를 호출하여 정수형 변수 a1에 대입한다

*C : ③의 호출을 받고 명령문을 실행하려 보니 ②로 인해 생성된 num1과 num2의 값(10,5)을 갖게 되어 정수형 a변수의 값은 15가 되고
return a; 그 값을 호출한 곳으로 반환한다.

④ : ③의 *C에서 반환된 15라는 값을 출력

⑤ : (②와 같음) *A의 set()이라는 메소드를 호출하여 20과 30을 전달

*A : ⑤에서 받은 20,30의 값을 num1, num2에 대입하고 값을 반환 하지 않고 내부의 *B의 변수에 저장      

⑥ : (③과 같음) e2(Ex클래스)내에 add()라는 메소드를 호출하여 정수형 변수 a2에 대입한다.

*C : ⑥의 호출을 받고 명령문을 실행하려 보니 ⑤로 인해 생성된 num1과 num2의 값(20, 30)을 갖게 되어 정수형 a변수의 값은 50이 되고 return a; 그 값을 호출한 곳으로 반환한다.

⑦ : (④와 같음) ⑥의 *C에서 반환된 50이라는 값을 출력



'Java' 카테고리의 다른 글

Java_09  (0) 2011.11.03
Java_08  (0) 2011.11.02
Java_07  (0) 2011.11.01
Java_06  (0) 2011.10.31
Java_05  (0) 2011.10.29
Java_04  (0) 2011.10.27
Java_02 Java 2011. 10. 25. 19:15

1. 프로그램 구성 요소

  • 키워드(keyword) : 예약어라고도 한다. Java자체에 미리 정의된 단어들. 다른목적으로 사용 불가
  • 식별자 : 변수명, 메소드, 클래스명. 사용자에 의해 정의된다. 언더바는 영어로 구분되고 대문자와
    소문자는 다른 변수로 구분되고 첫 글자로는 유니코드자바레터(알파벳,_,$)와 각국언어로 가능하나
    영어로 시작함이 일반적이다. 시작 글자로 괄호나 하이폰(-)은 금지.
  • 리터럴 : 고정되어 있는 값. 쉽게 말해 상수
  • 외에 연산자, 주석, 컴마, 괄호, dot, 배열, 세미콜론(문장과 문장사이 구분, 스페이스/탭) 등이 있다.


2. 자바의 기본 자료형

  • 논리형
    • boolean : C언어를 예로 참과 거짓을 1과 0으로 표현하지 않고 true 와 false의 값만 갖는다
      (1Byte)


  • 정수형
    • byte : 1Byte=8bit, 2진수로 보면 7칸의 숫자와 1칸의 부호를 의미하는 값을 가지고 있다.
      부호를 의미하는 첫번째 숫자를 부호와 절대치 라고 한다는 것 같다.

      ■ □ □ □ □ □ □ □ → ■ 이 양수의 값을 취할때 0 / 음수의 값을 취할때 1
      7  6  5  4  3  2  1  0 → 2의 제곱 표시 : 최대값은 27-1 이므로 0 1 1 1 1 1 1 1 = 127 이며
      음의 최대값은 1 0 0 0 0 0 0 0 = -128 으로
      표현범위는 -128 ~ 127 이 된다. 나머지도 이런식
    • char : C언어를 또 예로 들자면 char형은 1byte이다. 하지만 Java에서는 유니코드로
      char형의 값을 표현하기에 유니코드 문자 한글자당 2byte로 char형 또한 2byte가 된다
      부호없는 정수, 0부터 표현 하는 값 대입
    • short : 2byte, 범위는 -32,768 ~ 32,767
    • int : 4byte, 범위는 -2,147,483,648 ~ 2,147,483,647 (대략 21억정도)
    • long : 8byte, -263 ~ -263-1 엄청 큼......;;

 

3. 기본 입출력 스트림

  • 스트림
    • 먼저 입력된 data가 먼저 출력되는 자료구조
    • 뜻은 흐르는 물이라는 뜻, 단방향으로 수도파이프 구조, FIFO구조라고도 함
    • 지연될 수 있음


  • 바이트 스트림
    • InputStream, OutputStream 클래스와 하위 클래스로 구현
    • 8비트 크기를 갖는 바이트들의 스트림


  • 문자 스트림 
    • 입력되는 모든 data는 문자 이며 숫자로 식별되는 것도 변환시킬뿐 사실은 문자
    • Reader, Writer 클래스와 하위 클래스로 구현
    • 16비트 유니코드 문자들의 스트림


  • System.out : 표준 출력 스트림
  • System.in : 표준 입력 스트림
  • System.out.println() : 출력 후 새로운 라인 생성(엔터)
  • System.out.print() : 괄호안의 해당값 출력
  • System.out.printf() : 서식문자와 전달인자가 포함되어 괄호안의 따옴표내에 서식문자의 값이 출력



문제1) 가로와 세로를 입력 받아 사각형 넓이와 둘레 구하기


문제2) 반지름을 입력 받아 원의 넓이와 둘레 구하기. 단, 반지름은 정수로 입력받고 넓이와 둘레는 실수

 





 

금일 실습 예제





  1. public class Test1{ 
  2.     public static void main(String[] args){
  3.        
  4.         int a,b,c; // 정수형 변수를 선언
  5.         // int a;      int b;  int c; // 따로따로 변수 선언
  6.         // int a=20, b=10, c; // 변수선언과 동시에 초기화
  7.  
  8.         a=10;
  9.         b=20;
  10.         c=a+b;
  11.  
  12.         // System.out : 표준 출력(모니터)
  13.  
  14.         System.out.print("결과 : ");
  15.         System.out.print(c);
  16.         System.out.print(" ");
  17.        
  18.         // System.out.println("결과 : " + c);
  19.         // println : 한줄 출력후 엔터
  20.  
  21.         // 한줄 주석
  22.         /*
  23.            여러줄 주석
  24.            여러줄 주석
  25.            여러줄 주석
  26.         */
  27.     }
  28. }




  1. public class Test2 {
  2.     public static void main(String[] args){
  3.         /*
  4.         byte a=10, b=5, c;
  5.         // byte d=128; // error : overflow(값이 넘침)
  6.         // c=a+b; // error : overflow 미리 감지...?
  7.         c=(byte)(a+b); // (byte) : 형변환, 연산결과를 byte형으로 변환한다.
  8.         // byte형은 산술형(연산)의 용도라기 보다 이럴때 뭐하고 저럴때 뭐하고...
  9.         // 비교하는..blah blah
  10.  
  11.         System.out.println("결과 : "+ c);
  12.         */
  13.        
  14.         /*
  15.         int a=017, b=010; // 0이 붙으면 8진수로 인식 : a=15, b=8
  16.         int c=a+b;
  17.         System.out.println("a : "+a);
  18.         System.out.println("b : "+b);
  19.         System.out.println("결과 : "+c);
  20.         */
  21.  
  22.         /*
  23.         int a=0x17, b=0xa10; // 16진수 : x는 소문자이건 대문자이건 관계 없다
  24.         int c=a+b;       // 초기화 시킬때 많이 쓴다. 0x
  25.         System.out.println("a : "+a);
  26.         System.out.println("b: "+b);
  27.         System.out.println("결과 : "+c);
  28.         */
  29.  
  30.        
  31.         long a=10000000000L, b=10// 100억, 정수의 형태인 21억이상이 되어 L붙여줌
  32.                                     // 소/대문자 관계없다
  33.         long c=a+b;   
  34.         System.out.println("a : "+a);
  35.         System.out.println("b: "+b);
  36.         System.out.println("결과 : "+c);
  37.        
  38.     }
  39.  
  40. }





  1. public class Test3{
  2.     public static void main(String[] args){
  3. /*  float a=0;
  4.     double b=0;
  5.  
  6.     for(int i=1; i<=100000; i++){
  7.         a+=100000;
  8.         b+=100000;
  9.     }
  10.     a=a/100000;
  11.     b=b/100000;
  12.     System.out.println("a: "+a);
  13.     System.out.println("b: "+b);  */
  14.  
  15.     /*// ▽ 반지름이 10인 원의 둘레와 넓이
  16.     int a=10;
  17.     float b,c;
  18.     b=a*a*3.14f; // 3.14는 아무것도 안붙이면 배정도형실수 
  19.     c=a*2*3.14f; // float형 b,c 변수 선언으로 3.14도 단정도형으로 변환위해 f를 붙여줌
  20.     System.out.println("넓이 : "+b);
  21.     System.out.println("둘레 : "+c); */
  22.  
  23.     // 정수 연산자 정수 → 정수
  24.     // 정수 연산자 실수 → 실수
  25.     // 실수 연산자 실수 → 실수
  26.    
  27.     double a=1/2+1/2;
  28.     double b=1./2+1/2; // 1. 은 1.0 실수
  29.     double c=2/3*5+1./2; // 연산우선순위 파악 ①:/* ②:/ ③:①+②
  30.     System.out.println("a: "+a);
  31.     System.out.println("b: "+b);
  32.     System.out.println("c: "+c);
  33.    
  34.  
  35.     }
  36. }





  1. public class Test4{
  2.     public static void main(String[] args){
  3.         char a='a', b='z';
  4.         char c='A', d='Z';
  5.        
  6.         // 아스키코드 (기본암기)
  7.         // a~z: 97 ~ 122
  8.         // A~Z: 65 ~ 90
  9.         // Enter: 13(10), Esc: 27
  10.         // Alt+13(오른쪽키패드)=엔터, Alt+65=A
  11.         // 0: 48
  12.        
  13. /*
  14.         System.out.println(
  15.             a+":"+b+":"+c+":"+d);
  16.  
  17.         a=(char)(a+3); // 형변환(캐스팅)
  18.         System.out.println("a:"+a);
  19.  
  20.         System.out.println((int)a); // 코드값 출력을 위해
  21.         System.out.println((int)b); // int형으로 형변환
  22.         System.out.println((int)c);
  23.         System.out.println((int)d); */
  24. /*
  25.         System.out.print("java");
  26.         System.out.print(" "); // newline, Enter
  27.             // System.out.println("java"); // 위와 같다.
  28.         System.out.print("java "); // 위 두줄과 같다.
  29.  
  30.         System.out.print("java Framework Servlet"); // 는 Tab
  31.         System.out.println(" abcdefgxyz"); // 는 backspace */
  32.  
  33.         // 사용기피 클래스..
  34.         String s1="seoul";
  35.         String s2="korea";
  36.         String s3=s1+s2; // + : 문자열결합
  37.         // 문자열 + 정수 → 문자열
  38.         String s4=s3+40;
  39.         System.out.println(s1+" "+s2+" "+s3+" "+s4);
  40.     }
  41. }





  1. public class Test5
  2. {   public static void main(String[] args){
  3.         /*
  4.         int a=10, b=200;
  5.  
  6.         System.out.println("012345678901234567890123456789");
  7.  
  8.         // System.out.print("서식" + 값);
  9.         System.out.printf("a=%d b=%d%n",a,b); // %n은 printf에서만 사용하며 과 같다
  10.         // System.out.printf("a=%d b=%d ",a,b);
  11.         System.out.printf("%10d%10d%n",a,b); // 자리수 맞출때 쓴다. 일단위 기준
  12.         */
  13.  
  14.  
  15.         // 5page PrintStream클래스의 printf메소드 사용예
  16.         System.out.printf("%d %% %d = %d%n", 10,4,10%4);
  17.         System.out.printf("%10d%n", 123);
  18.         System.out.printf("%010d%n", 123);
  19.        
  20.         System.out.printf("%2$s %1$s %2$s ", "seoul","korea");
  21.         // 1$는 첫번째 값, 2$는 두번째 값
  22.  
  23.         System.out.printf("%1$tF %1$tT %1$tA ", java.util.Calendar.getInstance());
  24.         // 오늘 날짜 시간
  25. }
  26. }





  1. import java.io.IOException; // 예외
  2. public class Test6
  3. {   public static void main(String[] args) throws
  4.     IOException {
  5.         int ch;
  6.         System.out.print("한문자? ");
  7.  
  8.         ch=System.in.read(); // read(): 한문자를 입력받아 ASCII 코드를 반환
  9.  
  10.         System.out.println("ch : "+ch);
  11.         System.out.println("ch : "+(char)ch);
  12. }
  13. }





  1. import java.io.*; // 실무에선 * 절대 안쓴다고 함.. io 안에 있는 클래스 다 가져오란 소리
  2. // 무조건 외우장... 다
  3. public class Test7{
  4.     public static void main(String[] args)throws
  5.     IOException {
  6.         // new : 메모리 할당
  7.  
  8.         String name;
  9.         int kor, eng, tot, ave;
  10.  
  11.         System.out.print("이름?");
  12.         name=br.readLine(); // 엔터치기 전까지 한줄 입력 받는다.
  13.         System.out.print("국어?");
  14.         kor=Integer.parseInt(br.readLine()); // parseInt : 문자열을 숫자로 변환
  15.         System.out.print("영어?");
  16.         eng=Integer.parseInt(br.readLine());
  17.  
  18.         tot=kor+eng;
  19.         ave=tot/2;
  20.         System.out.printf("이름 : %s, 총점 : %d, 평균 : %d", name, tot, ave);
  21.     }
  22.  
  23. }


 




  1. // 문제 - 사칙연산 : +,-,*,/
  2. // 두 수를 입력받아 사칙연산을 하세요.
  3. // 실행 예)
  4. // 첫번째 수? 10
  5. // 두번째 수? 5
  6. // 10+5=15      10-5=5
  7. // 10*5=50      10/5=2
  8.  
  9. /*
  10. import java.io.*;
  11. public class Test8{
  12.     public static void main(String[] args)throws
  13.     IOException {
  14.         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  15.  
  16.        
  17.         int num1, num2, add, mi, gop;
  18.         double na;
  19.  
  20.         System.out.print("첫번째 수? ");
  21.         num1=Integer.parseInt(br.readLine());
  22.         System.out.print("두번째 수? ");
  23.         num2=Integer.parseInt(br.readLine());
  24.        
  25.  
  26.         add=num1+num2;
  27.         mi=num1-num2;
  28.         gop=num1*num2;
  29.         na=(double)num1/(double)num2; // 실수로 형변환
  30.        
  31.  
  32.         System.out.printf("%d + %d = %d ", num1, num2, add);
  33.         System.out.printf("%d - %d = %d ", num1, num2, mi);
  34.         System.out.printf("%d * %d = %d ", num1, num2, gop);
  35.         System.out.printf("%d / %d = %.1f ", num1, num2, na); // 값이 실수이므로 %f
  36.     }
  37. } */
  38.  
  39. import java.io.*;
  40. public class Test8
  41. {   public static void main(String[] args)throws
  42.     IOException {
  43.  
  44.         int a, b;
  45.  
  46.         System.out.print("첫번째수? ");
  47.         a=Integer.parseInt(br.readLine()); // 여기서 멈추는이유는 br.readLine()
  48.         System.out.print("두번째수? ");
  49.         b=Integer.parseInt(br.readLine());
  50.  
  51.         System.out.printf("%d+%d=%d ", a,b,(a+b));
  52.         System.out.printf("%d-%d=%d ", a,b,(a-b));
  53.         System.out.printf("%d*%d=%d ", a,b,(a*b));
  54.         System.out.printf("%d/%d=%d ", a,b,(a/b));
  55.         // System.out.printf("%d/%d=%f ", a,b,(double)a/b);
  56.         // 값이 실수로 나오게 하고 싶다면 △
  57.     }
  58. }




※ 종일 궁금했던 parseInt에 관한 확실한 정의(? 구글링)




....해보라고-_-

외워야 할 것들 ↗

'Java' 카테고리의 다른 글

Java_06  (0) 2011.10.31
Java_05  (0) 2011.10.29
Java_04  (0) 2011.10.27
Java_03  (0) 2011.10.26
Java_02  (0) 2011.10.25
Java_01  (0) 2011.10.24
Html,Jsp,Css_05 Html/Jsp/Javascript 2011. 10. 14. 18:02

전일에 이어 <script>문 작성

*) if 문 : 만약에 ~ 하다면... 
 
  범위의 조건을 설정하여 조건이 참이면 실행, 거짓일 땐 else구문을 실행한다. 
 
  연산식(A=500/2같은)에서는 아닌 경우도 있지만(오른쪽 먼저계산)
  기본적으로 코드 작성의 순차는 위에서 아래, 왼쪽에서 오른쪽이다.
  허나 if문에서는 상황에 따라 왔다 갔다 하는 속성을 가진다고 볼 수 있겠다.

*-I) if 문의 학점 구하기 : 결과값이 참이어도 다음 문구를 반복 실행한다

<script>
jum=prompt("점수를 입력하세요(0~100점 사이의 값",""); // 사용자로부터 숫자 입력받음

// 입력받을 숫자의 범위 설정 ▽

if(jum<0 || jum>100) // ←범위를 벗어난 경우  
 // if(!(jum>=0 && jum<=100)) ← 앞에 not이 붙어 있으므로 범위를 벗어난 경우
 // if(jum>=0 && jum<=100) ←정상범위
 // ||는 둘중 하나 &&는 둘다 실행, ||가 실행 속도면에서 유리
 {
  alert(jum+"(은)는 점수의 범위를 벗어났습니다.");
 }

// 정상적인 범위의 값이 들어온 경우 ▽
else{
if(jum>=90){ // 만약 95 입력시
   document.write(jum+" = A학점: 고생많았네"); // true: 결과 출력
  }
  if(jum>=80 && jum<90){
   document.write(jum+" = B학점: 나름했군"); // 별개의 문장이므로 결과 나왔지만 비교
  }
  if(jum>=70 && jum<80){
   document.write(jum+" = C학점: 잤나?"); // 또 비교
  }
  if(jum>=60 && jum<70){
   document.write(jum+" = D학점: 잤군"); // 또
  }
  if(jum<60){
   document.write(jum+" = F학점: 나가"); // 또;; 비효율적이다. 그래서 나온것이 else if
  }
</script>

*-II) if else문을 이용한 학점구하기: if문의 결과가 참이면 종료 거짓일때 else if 실행

<script>
jum=prompt("점수를 입력하세요(0~100점 사이의 값",""); // 사용자로부터 숫자 입력받음

// 입력받을 숫자의 범위 설정 ▽

if(jum<0 || jum>100) // ←범위를 벗어난 경우  
 // if(!(jum>=0 && jum<=100)) ← 앞에 not이 붙어 있으므로 범위를 벗어난 경우
 // if(jum>=0 && jum<=100) ←정상범위
 // ||는 둘중 하나 &&는 둘다 실행, ||가 실행 속도면에서 유리
 {
  alert(jum+"(은)는 점수의 범위를 벗어났습니다.");
 }

// 정상적인 범위의 값이 들어온 경우 ▽
if(jum>=90){ // A학점
  document.write(jum+" = A학점: 고생많았네"); // 참이면 여기서 else{} 끝으로 이동: 끝 거짓은 다음으로
 }else if(jum>=80){
  document.write(jum+" = B학점: 나름했군");
 }else if(jum>=70){
  document.write(jum+" = C학점: 잤나?");
 }else if(jum>=60){
  document.write(jum+" = D학점: 잤군");
 }else{
  document.write(jum+" = F학점: 나가");
 } // 참이 나오면 끝. 안나오면 else{}안의 실행
// → → → → → → → → → → → → → → → → → → → 참을 만족할 때 여기로 와서 끝남
</script>

# 결과(*) (*-I과 *-II 결과는 동일)



**) switch문의 구조

<script>
s="su" // 조건
  switch(s){          // (변수or상수)에 있는 값과
   case "월":document.write("<img src='aaa.jpg'>");
   // case "상수": 에 있는 값이 같으면 해당case의 :다음을 출력한다.
   // 조건이 맞는것이 없을땐(default가 없다는 전제로 그냥 종료)
    break; // case가 반복일때 멈춤
   case "5":documnet.write(10*10);
    break; // break가 없다면 다음 case까지 연속으로 실행된다
   case "su":document.write(s+"요일"); //su요일
    break;
   default:document.write("잘못들어온 값"); // case에 해당값이 없다면 :다음을 출력,필요 없으면 생략해도 됨 
  }
</script>

**-I) switch문을 이용한 학점 구하기

⊙ 특정 수를 정수화시키는 method : parseInt
    ex) document.write(parseInt(95/10)); → 9

<script>
jum=prompt("점수를 입력하세요(0~100점 사이의 값",""); // 사용자로부터 숫자 입력받음

// 입력받을 숫자의 범위 설정 ▽

if(jum<0 || jum>100) // ←범위를 벗어난 경우  
 // if(!(jum>=0 && jum<=100)) ← 앞에 not이 붙어 있으므로 범위를 벗어난 경우
 // if(jum>=0 && jum<=100) ←정상범위
 // ||는 둘중 하나 &&는 둘다 실행, ||가 실행 속도면에서 유리
 {
  alert(jum+"(은)는 점수의 범위를 벗어났습니다.");
 }

// if 문을 사용할때와 아래 목적은 같다. (학점 출력)
switch (parseInt(jum/10)) // 입력받은 jum의 값을 10으로 나눈 몫
 {
 case 10:
 case 9:hak="A학점: 고생했네";break
// △ 몫이 10 또는 9일 때의 hak의 변수선언 동시에 따옴표안의 내용이 변수에 저장?
// 좀더 쉬운말이 생각이 나지 않는다..
 아래도 같은 의미!?
 case 8:hak="B학점: 나름했군";break
 case 7:hak="C학점: 잤나?";break
 case 6:hak="D학점: 잤군";break
 default:hak="F학점: 나가";break
 }
 document.write(jum+" = "+hak); 
 }
  </script>

# 결과 (**-1)
상단의 결과 (*)과 동일 

**-II) switch문을 이용한 날짜 구하기

⊙ 아래 예제에서 볼 수 있는 method를 정리해볼까..

- 일단 method란? Javascript의 Object에 속해 있어 특별한 기능을 수행하는 함수
   ex) Objectname.method() <--메소드 표현
         Objectname.properties <--속성 표현
- new Date() : 이것도 메소드..? 인가? 여튼 시스템상의 날짜를 가져오는 역할을 한다
- get : 단어 뜻 그대로 앞에 붙은 변수명에 해당되는 객체에서 정보(?)를 가져오는 역할
- set : 앞에 붙은 변수명에 해당되는 객체의 값을 초기화 하는 역할
          (예제를 더 봐야 알겠지만 아직 set에 대해 확실히 감이 안온다)

<script>
// 시스템의 날짜와 시간정보 얻어오기
 date = new Date(); // 변수=생성 클래스(). 시스템의 날짜를 구하는 객체
 y = date.getYear(); // date라는 객체 안에서 Year(년도)를 얻어내(get)라.
// get은method - 정보를 얻어내는 기능

 // date.setYear(2012) : 객체의 년도만 2012년으로 셋팅해라.
 m = date.getMonth()+1; // 월구하기: 0-1월 ~ 11-12월)
 d = date.getDate(); // 일구하기
 w = date.getDay(); // 요일구하기 : 0-일, 1-월, 2-화, 3-수, 4,-목, 5-금, 6-토
 h = date.getHours(); // 시간 구하기
 mm = date.getMinutes(); // 분 구하기
 // 초 구하기 : s = date.getSeconds(); // 자바에서는 시/분/초 에 s가 없다.

// 현재 요일을 찾아 document.write로 현재 날짜 시분 출력 
 switch (w) // w= 0~6 (일~토)
 {
 case 0:wStr="일";break; // 자바스크립트에서는 명령문 안에서 (wStr같은) 변수선언 가능
 case 1:wStr="월";break;
 case 2:wStr="화";break;
 case 3:wStr="수";break;
 case 4:wStr="목";break;
 case 5:wStr="금";break;
 case 6:wStr="토";break;
 }
 document.write(y+"년 "+m+"월 "+d+"일 "+wStr+"요일 "+h+"시 "+mm+"분<br>")
 // 여러 케이스에서 변수를 대체함으로 출력명령은 하나로도 가능
 
 // 위와 같지만 요일에 해당되는 이미지 출력 (케이스별 출력)
 switch (w)
  {
  case 0:document.write("<img src='../html/img/week/sun.jpg'>");
  break;
  case 1:document.write("<img src='../html/img/week/mon.jpg'>");
  break;
  case 2:document.write("<img src='../html/img/week/tue.jpg'>");
  break;
  case 3:document.write("<img src='../html/img/week/wed.jpg'>");
  break;
  case 4:document.write("<img src='../html/img/week/thu.jpg'>");
  break;
  case 5:document.write("<img src='../html/img/week/fri.jpg'>");
  break;
  case 6:document.write("<img src='../html/img/week/sat.jpg'>");
  }
 
</script>

# 결과 (**-II)

△ 윈도우상의 날짜를 변경함으로 다른 이미지 출력가능


*** 반복문 for

⊙  for (초기값; 최종값(조건); 증가/감소)

(△ 본인의 생각일뿐; 설명이 잘못되었다면 지적바람)

<script>
 img = "<img src=../html/img/blog_img.GIF>";
 for ( cnt=1; cnt<=3; cnt++ ) // 자바 스크립트는 변수값으로 자동으로 형선언이 된다.
 {
  document.write(img);
 }
 document.write("<p>");
 
 // 1~50까지 홀수 출력
 for ( n=1; n<100; n+=2) // 초기값1에서 2씩 증가시켜 홀수 출력
 {
  document.write(n+"&nbsp;");
 }

 document.write("<p>");
 
// 1~50까지 홀수 출력: table에 넣어서
 document.write("<table border=1>");
 document.write("<tr>");
 for ( n=1; n<100; n+=2)
 {
  document.write("<td width=50 align=center>"+n+"</td>");// width는 브라우저크기에 맞춰짐
  if((n+1)%10==0) document.write("</tr><tr>"); // 추가: if문으로 조건문, 행내리기..
 } // (9+1)%10==0 이므로 9에서 다음줄로 넘어가는 방식
// 규칙(조건문)을 잘 찾아내는 능력 중요.
 document.write("</tr></table>");
 </script>

# 결과


***-I) for문 연습1: 숫자를 입력받아 구구단 출력

<script>
 dan = prompt("숫자를 입력하세요","");  
  document.write("<table border=1>");
  document.write("<caption>== "+dan+"단 ==</caption>");
  
 for (d=1; d<10 ; d++)
 {
  if (d%2==0)
  {
   document.write("<tr bgcolor=#ffcc00>");
  }
  else {
   document.write("<tr>");
  }
  document.write("<td align=center>"+dan+" * "+d+" = "+dan*d+"</td></tr>");
 }
  document.write("</table>");
 </script>

# 결과 (***-I)
 



***-II) for문 연습2: 자바스크립트로 달력만들기


<script>
// 1. 조건 설정하기
 now = new Date(); //오늘날짜와시간에 관한 정보
 y = now.getYear(); //현재 연도
 m = now.getMonth()+1; //현재 월 : 1월이 0으로 시작하여 +1
 d = now.getDate();
 w = now.getDay();

 now.setDate(1); // 금일 날짜를 1일로 바꾼다
 w = now.getDay(); // 1일에 대한 요일 구하기
 
// 그달의 마지막 날 구하기
// 현재 연도를 4로 나눈 값의 나머지가 0 이고
// 100으로 나눈 값의 나머지가 0 
// 또는 현재 연도를 400으로 나눈 값의 나머지가 0 일 때
// 2월의 말일을 구할 수 있다? 라는 것 같다.
// y%4 == 0 && y%100 != 0 || y%400 == 0
// 위와 같이 입력되는게 정석일까?
 switch(m){
  case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
  case 12: lDay=31; break;
  case 2:
   if (y%4 == 0) // 위에서 말한걸 간단히 적용 
   {
   lDay=29; // 나머지가 0일때 말일은 29일
   }
   else {
   lDay=28; // 나머지가 0이 아닐때 말일은 28일
   }
   break;
   default : lDay = 30; // 4월은 항상 30일 이라던데...상식부족?!
 }
 document.write("<table border=1>");
 document.write("<caption>"+y+"년 "+m+"월</caption>");
 document.write("<tr><td><img src=../html/img/c.gif></td></tr>");

 document.write("<tr><td>");
 // 달력날짜 시작▽
 document.write("<table width=100%>");
 document.write("<tr><td>일<td>월<td>화<td>수<td>목<td>금<td>토</tr> <tr>");
 for (space=1; space<=w; space++)
 {
  document.write("<td></td>") // 1일 출력전공백
 }

 // 날짜
 cnt = w;
 for (day=1; day<=lDay; day++)
 {
  document.write("<td>"+day+"</td>");
  cnt++;
  if (cnt==7)
  {
   document.write("</tr><tr>");
   cnt=0;
  }
 }

 document.write("</tr></table>");
 // 달력날짜 △
 document.write("</td></tr>");
 
document.write("</table>");
 </script>

# 결과 (***-II)
 


※ 작성된 소스만 읽어보면 이해도 되고 재밌다 싶으면서도 직접 해보세요 하면..
할줄은 모르는 상태?

'Html/Jsp/Javascript' 카테고리의 다른 글

Html,Jsp,Css_06  (0) 2011.10.17
[Test] 회원가입 폼 만들기  (1) 2011.10.16
Html,Jsp,Css_05  (0) 2011.10.14
Html,Jsp,Css_04  (0) 2011.10.13
Html,Jsp,Css_03  (0) 2011.10.12
Html_02  (0) 2011.10.11