BigData/JAVA (14)
[Day5] 캡슐화

자바의 특징 3가지

1. 캡슐화(클래스): user_DataType을 선언하는 자료형
 클래스의 멤버 (필드, 멤버 변수, 생성자, 멤버 메소드)

 객체=인스턴스=오브젝트(클래스로 생성된 각각의 것들)
 
 static 멤버 : 선언과 동시에 static 영역에 bind가 되면서 클래스.멤버로 바로 실행된다. (binding)
 
 non-static 멤버 : 생성된 주소가 없기 때문에 new 연산자를 이용해서 객체가 생성될 때 호출할 주소가 대입되어
     대입된 주소를 통해 호출되어 진다.
     
     클래스명   클래스변수 = new 클래스명();
     Score  s1=new Score();
     Score  s2=new Score(); 
     Score  s3=new Score(); 
     
     클래스변수.멤버로 호출한다. 클래스변수=인스턴스
     
     
 <생성자란?>
 
  가. 클래스 이름과 동일하되 반환형은 없고 자바에서는 public을 원칙으로 사용한다.
  
  나. 생성자는 overload 할 수 있다.
  
  다. 생성자는 this()라는 내부 키워드를 사용하여 생성자끼리 호출이 가능하다.
  
  라. 생성자는 객체를 통해 명시호출 할 수 없고 객체를 생성할 때 자동으로 한 번만 호출된다.
  
   My  m=new My();
    m.My(100); ----> (X)
   My  m=new My(100); ----> (X)
  
  마. 생성자를 명시하지 않으면 default 생성자가 호출되고 하나라도 명시하면 생성된 객체의 매개인자에 따라
   맵핑된 생성자가 호출된다. (-> 생성하면 default는 생성되지 않는다는 것임)
   
   new My(); -> public My() {}
   new My(10); -> public My(int a) {}
   new My(10, 10); -> public My(int a, int b) {}
   
  바. 생성자는 상속되지 않는다. 상속시 선조의 생성자는 super()라는 키워드를 사용한다.
  
  사. 생성자의 목적은 멤버변수의 초기화에 있다.
  

2. 상속: 클래스의 기능을 선조와 후손의 개념을 이용해서 기본 클래스에서 확장해서 사용

3. 다형성(추상화): 상속시 선조에 따른 후손 클래스를 다양한 형태를 가진 결과를 유도하는 것

===========================================================================================

[클래스Class] : 사용자 자료형을 말한다.

 - 구성: 멤버필드(public static final ...PI),
      생성자, 멤버변수, 멤버 메소드를 가진다.
  
   [형식]
    접근지정자(public, private 등) class UserName {
      구성 ...
    }
    
   ex) int a, double d;  => 자주 쓰는 두 개를 Test라는 하나의 이름으로 묶을 수 없을까? -> 클래스의 키워드
  
     <선언>
  
     public class Test {
    
      int a;
      double d;
    
     }
    
    
     <사용은 선언된 클래스 자료형을 생성(new)해서 사용하도록 한다>
    
     heap: 자유영역(동적할당) 공간, 그림판 백그라운드
         new를 만나면 동적 할당 공간에 메모리를 실행하고 실행이 끝나면 GC(가비지컬렉터)가 메모리를 자동 소거시킨다.
    
     stack&static: 정적공간 -> class(자바에서 씀), struct, union 선언하면 주소(&)를 관리하는 곳
           static(자바에서 씀)
           호출하면 Bind를 Binding 한다.
    
     static, heap, stack;
    
     1. Test t1=new Test(); // Test라는 자료형의 변수만큼 메모리를 확보한다.
     2. 확보된 메모리의 주소를 이용해서 멤버에 값을 전달한다.
      t1.a=100;
      t1.d=90.9;
      
      
  - 값 전달은 은닉된 멤버변수(private)에게 오픈된 메서드(public)가 값을
     전달 및 변경(void setXX)하고 리턴받는 구조(data type getXX)를 가진다.
    setter & getter 라고 부른다.


===========================================================================================

 


 

 

'BigData > JAVA' 카테고리의 다른 글

[Day7] 2차원 배열  (0) 2015.03.05
[Day6] 배열  (0) 2015.03.05
[Day5] 반복문  (0) 2015.03.05
[Day4] 조건문  (0) 2015.03.05
[Day3] JVM (Java Virtual Machine)의 메모리  (0) 2015.03.05
  Comments,     Trackbacks
[Day5] 반복문

3. 반복문 - 입력(while, do~while)

 while문 : {}안에 명령문이 조건식이 true일 때만
     반복적으로 수행하는 구문
 활용 :   무한루프에서 제어변수, 조건식을 이용해서 원하는만큼 반복을 제어한다.
  
 [형식]
  while(true) { // 자바는 0과 1로 true/false을 구분하지 않음
   명령;
  }
  
 자바의 구문에서 사용되는 특수 키워드(예약어)
 : break(구문), return(메서드 중단), continue(구문)
 
 
 do ~ while() 문 : while문과 동일하되 조건식이 형식에 나중에 명시되므로
      조건식이 false 경우라도 명령이 한 번은 수행된다.
 [형식]
  do {
   
   명령;
   
  } whlie(조건식);
  
  
 - while : 현금인출기
 - do~while : 예약시스템, 발권시스템, 메뉴리스트(코드예문-앱)
 
 출력반복 : for - 초기식, 조건식, 연산식을 하나의 구문에 ;를 기준으로 분류해서 명령을 수행하는 단일 반복을 말한다.
 
 [형식]
 
  for(초기식(1); 조건식(2); 연산식(3)) { // for의 변수 규칙: i, j, k, l, m, n
   명령(4);
  }
  
  start (1) -> (2) 참이면 -> (4) -> (3)
      -> (2) 참이면 -> (4) -> (3)
      -> 조건식이 거짓이 되면 end
  
  
  for(;;) {} - 무한 루프
  
 자바의 중첩구문 : 자바의 기본구문 (조건, 선택, 반복)문 등을 중첩으로 사용할 수 있다.
 
 - 다중 for문은 출력의 나열을 원할하게 사용할 수 있는 특징을 가진다.
 
 [형식]
 
 for(초기식; 조건식; 연산식) {
 
  for(초기식; 조건식; 연산식) {
 
   명령;
 
  }
 
 }
 
 - 중첩 for문을 2차원 행렬로 잡고 유연하게 연동한다.
  outter는 줄을 담당, inner는 칸을 담당 
  
  
  

'BigData > JAVA' 카테고리의 다른 글

[Day6] 배열  (0) 2015.03.05
[Day5] 캡슐화  (0) 2015.03.05
[Day4] 조건문  (0) 2015.03.05
[Day3] JVM (Java Virtual Machine)의 메모리  (0) 2015.03.05
[Day2] 자료형  (0) 2015.03.05
  Comments,     Trackbacks
[Day4] 조건문

자바의 기본 구문 : 중첩으로 사용 가능하다.

조건문 if
선택문 switch ~ case
반복문 (입력) while, do ~ while
반복문 (출력) for

==========================================================

조건문 if(단일) : 명령이 true, false로 나뉠 때 사용한다, if(다중)

1. 단일 if
 [형식] if(조건식(true)) // true, false로 결과가 리턴되어야 한다.
 {
  명령;
 }
 
 ex) 입력된 수가 0보다 크면 0보다 크다라고 출력하자.
 
 int a=10;
  if(a>0) {
   System.out.println("0보다 크다");
  }
 

2. 단일 if ~ else

 [형식] if(조건식) // true, false로 결과가 리턴되어야 한다.
 {
  true 명령;
 } else {
  false 명령;
 }
 
 ex) 입력된 수가 0보다 크면 크다, 그렇지 않으면 작다라고 출력하자.
 
 int a=10;
  if(a>0) {
   System.out.println("0보다 크다");
  } else {
   System.out.println("0보다 작다");
  }

3. 다중 if ~ else

 [형식] if(조건식1) {
  true 명령;
 } else if(조건식2) {
  true 명령;
 } else if(조건식3) {
  true 명령;
 } else {
  false 명령;
 }
 
 ex) 평균이 90점 이상이면 A, 80점 이상이면 B, 70점 이상이면 C, 나머지는 F
 
 int avg=80;
 
 if(avg>=90) {
   System.out.println("A");
 } else if(avg>=80) {
   System.out.println("B");
 } else if(avg>=70) {
   System.out.println("C");
 } else {
   System.out.println("F");
 }
 

선택문 : switch ~ case 문
    - if문의 범위연산조건을 간결하게 하기 위한 구문
[형식]
switch(정수형변수(int)) { // JDK 1.7버전부터는 String도 들어갈 수 있다
 case 변수에 대입된 값 :
      명령;
      break;
 case 변수에 대입된 값 :
      명령;
      break;
 default : 명령 
}

특징 :  하나의 switch 여러개의 case를 가진다.
   case 뒤에 선언된 값은 하나만 올 수 있다.
    정렬로 나열해서 사용하지 않는다.
  
    경우에 따라 case 명령부분에 break; 구문을 선택적으로 사용한다.
   
    자바에서는 클래스의 필드값을 대입할 때 사용한다.
  
ex) 4계절이 있다.
 입력된 수가 1이면 봄, 2이면 여름 3이면 가을 4면 겨울을 출력해라.
 
 콘솔을 통해 값을 입력받는 방법
 
 1. 메인 메서드의 args로 입력받는 방법
 2. Scanner 클래스를 이용해서 입력받는 방법
 3. java.io 팩키지를 이용해서 다양하게 입력받는 방법
 
 

'BigData > JAVA' 카테고리의 다른 글

[Day5] 캡슐화  (0) 2015.03.05
[Day5] 반복문  (0) 2015.03.05
[Day3] JVM (Java Virtual Machine)의 메모리  (0) 2015.03.05
[Day2] 자료형  (0) 2015.03.05
테스트  (0) 2015.03.04
  Comments,     Trackbacks
[Day3] JVM (Java Virtual Machine)의 메모리

JVM (Java Virtual Machine)의 메모리

(1) 스택 영역 (Runtime Stack) : 실행시 사용하는 메모리 영역

(2) 힙 영역 (Garbage Collection Heap) : 동적 메모리 할당 영역

(3) 상수 영역 (Constant & Code Segment) : 상수 데이터 및 static 데이터 할당 영역

(4) 레지스터 영역 (Process Register) : 프로세서 실행 관련 메모리 할당 영역


======================================================================

자바의 메모리 구조

: OS에 의하여 프로그램이 수행되면 JVM은 OS로부터 적절한 크기의 메모리 공간을 얻어내게 된다.
그리고 얻어낸 메모리 공간을 JVM은 3영역으로 나누어 관리한다.

메소드(method area) 영역 : 매개변수, 지역변수
      (메소드의 실행이 종료되면 자동반환)
      
스택(Stack) : 매개변수, 지역변수
   (메소드의 실행이 종료되면 자동반환)
   
힙(Heap) : 클래스객체, 배열객체, 문자열객체
   (new 연산자 사용, 객체가 사용하는 메모리공간)
   

java.lang -> system ->

======================================================================

class란? User Data Type
 - 멤버변수 : 전역변수 (값 전달)
 - 필드 : 상수
 - 생성자 : 멤버변수 초기화 및 객체 초기화
 - 메소드 : 멤버들을 이용해서 명령을 수행하는 단위 ex) println
 
======================================================================

메소드의 종류 : static, non-static (내일)
메소드의 원형 : void, return형

======================================================================

1. static void형

  [형식] - main
    접근제한자 static void userName(매개인자) {
     명령;
   }

  [사용방법]
   userName(매개인자값...);
  
2. static return 형
    리턴하는 값의 데이타 형을 기재한다.

   [형식]
    접근 제한자 static dataType userName(매개인자) {
    명령;
   return dataType 값;
   }

   [사용방법]
     user  
  
  
  

// C(Create)R(Reuse)U(Update)D(Delete)를 모두 만족해야 참조관계

package com.exam;

// import com.test.*; // com.test 밑에 있는 모든 클래스를 참조
import com.test02.MY; // com.test 밑에 있는 MY 클래스를 참조, 이것만 쓸거면 이것만 import 하는게 좋음 (메모리 문제)

public class Test {

 public static void main(String[] args) {
  
  MY.Disp();
  MY.Prn();
  
  com.test02.MY.Disp(); // import 하지 않아도 이렇게 입력하면 불러오기 가능
  com.test02.MY.Prn();

 }

}

 

package com.test01;

public class Test {

 public static int getA() {
  return 100;
 }
 
 public static void getB() {
  System.out.println(300);
 }
 
 public static char getCh() {
  return 'A';
 }
 
 public static double getD() {
  return 90.9;
 }
 
 public static void main(String[] args) {

  int a=getA();
  System.out.println("a="+a);
  System.out.println("a="+getA()); // 바로 메서드로 호출해서 출력
  // System.out.println(getB()); 에러메세지 출력
  
  System.out.println(getCh()); // A
  System.out.println(getD()); // 90.9
  
  int hap=(int)(getA()+getD());
  System.out.println("hap="+hap);
  
// int a=(int) 90.9; 90 double d=90; 90.0
  

 }

}

 


 

 

'BigData > JAVA' 카테고리의 다른 글

[Day5] 캡슐화  (0) 2015.03.05
[Day5] 반복문  (0) 2015.03.05
[Day4] 조건문  (0) 2015.03.05
[Day2] 자료형  (0) 2015.03.05
테스트  (0) 2015.03.04
  Comments,     Trackbacks
[Day2] 자료형

자바의 값 (상수-field, value)


value : 값, 단일문자, 문자열,        정수,    실수,     논리 등
     'a'     "abc" or "a" 100    1.1      true/false
     char    string       int    double   boolean
    
자료형 크게 2가지
: 배열, 클래스 등의 참조형과 기본데이타형

기본 데이터형 (primitive data types) 8가지

1. byte(1) : (-128~127)

2. short(2) : (-32,768 ~ 32,767)

3. int(4) :
 (-2,147,483,648 ~ 2,147,483,647)

4. long(8)

5. float(4) : 부동 소수점 값 0.0f

6. double(8)

7. boolean(1) : true, false 값

8. char(2) : 16비트 Unicode 문자

byte -> short -> int -> long, float -> double

http://unicode-table.com/en/  참조

==============================================================

0, 1 : 1비트 *8 = 1 byte : 글자를 표현하는 최소 단위

- byte 단위로 전송되는 것을 Stream 이라고 한다.
 128 64 32 16  8421
   0  0  0  0  0000
  
   100 - byte (1) 0000 0000
  
==============================================================

데이타타입 변수 ; // class, struct, union 등
변수=상수 (값); // 객체생성, 직대입, 네트워크

연산 // 직연산, 전송값, 대입연산
출력 // 프린터, con, 파일, DB 등

==============================================================

 

package com.test;

public class Test { // 멤버변수, 필드, 생성자, 메소드(클래스 안에서 선언된 함수)가 올 수 있다

 // 공개형 고정적 반환값 없는 main (인수), 메인 메소드
 public static void main(String[] args) { // 프로그램의 진입점, 반드시 하나만
  // 값을 출력하는 구문
  System.out.println('a'); // 단일문자
  System.out.println("abcd"); // 문자열
  System.out.println(100); // 정수
  System.out.println(100.0); // 실수
  System.out.println(true); // 논리값
  System.out.println(false);
  
  System.out.println('金');
  System.out.println("TRUE"); // 논리값 대문자는 안됨
  System.out.println("a");
 }

}

package com.test;

public class Test01 {
 public static void main(String[] args) {
  //값이 연산자를 만나면 int(정수)로 연산하는 성질
  System.out.println('a');
  System.out.println('a'+'b'); // a의 아스키 코드값은 97을 뽑아옴
  System.out.println('a'+1); // 97 + 1
  System.out.println('a'-1); // 97 - 1
  System.out.println('A'+1); // A의 아스키 코드값 65 + 1
  System.out.println("a"+"b"); // 문자열 뒤에 +는 연결문자
  // System.out.println("a"-"b"); // -는 에러난다
  System.out.println("a"+100+20);
  System.out.println("a"+(100+20)); // 우선순위가 있다
  
  System.out.println(90.9f); // 4byte - float
  System.out.println(90.9d); // 8byte - double : 실수의 default, 접미사 d가 사실상 필요 없음
  
 }
}

 

package com.test;

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

 // 출력포맷
 // 한문자 %자리크기c 문자열 %자리크기s 정수 %자리크기d 실수 %자리크기f
  
 // System.out.printf("출력할 내용과 자리지정", 값);
 System.out.printf("값 :%5c%3c",'a','b'); // 오른쪽 정렬
 System.out.println();
 System.out.printf("값 :%-5c%-3c",'a','b'); // 왼쪽 정렬
 System.out.println();
 System.out.printf("%5s %10.1f","abc",90.27); // 숫자는 반올림이 원칙
 System.out.printf("%5s %10.1f","abcdfgesdfs",90.27); // 문자열은 overflow 되도 다 출력한다
 System.out.println();
 //"제어문자 \t \n \b"
 System.out.printf("%5s\t%10f\n","abc",90.27);
 //100+200=300
 System.out.printf("%d+%d=%d\n",100,200,(100+200));
 System.out.println(100+"+"+200+"="+(100+200)); // printf에 비해 조잡해진다
 
 }
 
}

 

package com.test;

public class Test03 {

 public static void main(String[] args) {
  
  /* 출력연습
   * 100+200=?
   * 200-100=?
   * 200*100=?
   * 200/100=?
   * 200%100=?
   */
  
  System.out.printf("%2d + %2d = %-5d\n",100,200,(100+200));
  System.out.printf("%2d - %2d = %-5d\n",200,100,(200-100));
  System.out.printf("%2d * %2d = %-5d\n",200,100,(200*100));
  System.out.printf("%2d / %2d = %-5d\n",200,100,(200/100));
  System.out.printf("%2d %% %2d = %-5d\n",200,100,(200%100));
  System.out.println("감성지수 20%야"); // println에서는 %가 예약어가 아니기 때문에 가능함
  System.out.println(" '감성지수' 20%야"); // 최신의 자바는 싱글쿼터가 그대로 표시됨
  System.out.println("용돈을 ₩30000원 받았다"); // 원화표시는 특수문자로 해야함

 }

}


'BigData > JAVA' 카테고리의 다른 글

[Day5] 캡슐화  (0) 2015.03.05
[Day5] 반복문  (0) 2015.03.05
[Day4] 조건문  (0) 2015.03.05
[Day3] JVM (Java Virtual Machine)의 메모리  (0) 2015.03.05
테스트  (0) 2015.03.04
  Comments,     Trackbacks
테스트

테스트

'BigData > JAVA' 카테고리의 다른 글

[Day5] 캡슐화  (0) 2015.03.05
[Day5] 반복문  (0) 2015.03.05
[Day4] 조건문  (0) 2015.03.05
[Day3] JVM (Java Virtual Machine)의 메모리  (0) 2015.03.05
[Day2] 자료형  (0) 2015.03.05
  Comments,     Trackbacks