2016년 6월 10일 금요일

04day java

Java 클래스

  • 변수 - 멤버필드
    • 인스턴트 멤버필드
      • 인스턴스 생성 후에 사용가능
    • 클래수 멤버필드(static)
      • 인스턴스화를 하지 않아도 사용가능
  • 함수 - 멤버메서드
    • method 선언
      • 식별자
      • 동사(소문자) + 명사(대문자)
      • 매서드(      ){
             실행문;
        }
OOP (Object Oriented programming) : 객체 지향 프로그래밍
  • 4가지 특성 -------------→ 문법
    • 캡슐화(은닉화)
      • 멤버에 접근을 제어 →특정 권한을 가져야 접근 가능
      • 접근제어자
        • private
        • protected
        • package
        • public
    • 상속
    • 추상
    • 다형



1
class MethodEx01{
    //메서드 선언
    void doTest1(){
        //변수, 제어문 등이 들어올 수 있음
        System.out.println("doTest1() 호출");
    }
    void doTest2(int data1){
        //인자, 매개변수
        //int data1 : 지역변수
        System.out.println("doTest2() "+data1);
    }
    void doTest3(int data1, String data2){ //자료형이 다른 두개의 인자를 받을 수 있음
        System.out.println("doTest3() "+data1);
        System.out.println("doTest3() "+data2);
    }
    // 두 수를 + 한 결과를 돌려보내는 메서드를 생성
    // 리턴할 자료형을 앞에 기술해야 함
    int doTest4(int data1, int data2){
        int sum= data1 + data2;
        return sum;
    }
}
public class ExecEx01{
    public static void main(String[] args){
        MethodEx01 ex01;
        ex01 = new MethodEx01();
        //메서드의 호출 //재사용이 가능함
        ex01.doTest1();
        ex01.doTest1();
        ex01.doTest1();
        
        ex01.doTest2(10);
        ex01.doTest3(20,"홍길동");
        
        int result = ex01.doTest4(10,20); //리턴값을 받아줄 변수를 생성
        System.out.println("결과 : " +result);
        System.out.println("결과 : " +ex01.doTest4(10,20));
    }
}


2
//UtilEx 클래스 만들고 시작단수, 끝단수 입력받아 구구단을 출력하는 gugu 메서드 선언
class UtilEx{
    String gugudan(int data1, int data2){
        String sum="";
        for(int j=data1;j<=data2;j++){
            for(int i=1;i<=9;i++){
            sum += j+" X "+i +" = "+ j*i+"\t";
            }
            sum +="\n";
        }
        return sum;
    }
    
}
/*class UtilEx{
    void gugudan(int start, int end){
        for(int i=start; i<=end; i++){
            for(int j=1; j<=9;j++){
                System.out.print(i+" x "+j+" = "+i*j+"\t");
            }
            System.out.println();
        }
    }
}*/
public class gugu01{
    public static void main(String[] args){
        UtilEx g1 = new UtilEx();
        System.out.println(g1.gugudan(2,9));
    }
}


3
class MethodEx02{
    //Method Overloading 매서드의 중복 정의
    // 1. 메서드명이 같아야함
    // 2. 인자 - 갯수 다르거나, 순서가 다르거나
    void doTest1(){
        System.out.println("doTest1() 호출");
    }
    void doTest1(int data1){
        System.out.println("doTest1() 호출 " +data1);
    }
    void doTest1(int data1, String data2){
        System.out.println("doTest1() 호출 " +data1 +" -- "+data2);
    }
    void doTest1(String data1, int data2){
        System.out.println("doTest1() 호출 " +data1 +" -- "+data2);
    }
    
}
public class ExecEx02{
    public static void main(String[] args){
        MethodEx02 ex02= new MethodEx02();
        ex02.doTest1(); //인자값에 따라서 다르게 호출함
        ex02.doTest1(20);
        ex02.doTest1(20, "홍길동");
        ex02.doTest1("김범수", 20);
    }
}


4
class MethodEx03{
    //가변인자
    void doTest(String ... names){    ///String[] names = { 인자값1, 인자값2, ... };
        System.out.println("갯수 "+names.length);
        for(String name : names){
            System.out.print(name +"\t");
        }
            System.out.println();
        
    }
}
public class ExecEx03{
    public static void main(String[] args){
        MethodEx03 ex03 = new MethodEx03();
        ex03.doTest("1");
        ex03.doTest("1","2");
        ex03.doTest("1","2","3");
    }
}


5
class MethodEx04{
    //멤버 변수
    //선언만 해도 초기값을 가짐
    String data1; //초기값 null
    int data2;    //초기값 0
    char data3;   //초기값 ''
    
void printData(){
    System.out.println("데이터 : "+data1);
    System.out.println("데이터 : "+data2);
    System.out.println("데이터 : "+data3);
    
    String data4 =null;  //로컬변수는 초기화를 해주지 않으면 에러남
    System.out.println("데이터 : "+data4);
    
}
}
public class ExecEx04{
    public static void main(String[] args){
        MethodEx04 ex04 = new MethodEx04();
        ex04.printData();
    }
}


6
class MethodEx05{
    //this
    String data1 = "박문수";
    
    void printData(String data1){
        System.out.println("데이터 : " +data1); //data1은 메서드의 파라매터를 가리킴
        System.out.println("데이터 : " +this.data1); //data1은 맴버변수를 가리킴
    }
    
    void printData(){
    System.out.println("데이터 : "+data1);
    System.out.println("데이터 : "+this.data1);  //같은 멤버변수에 접근
    System.out.println("this : "+this); //자신의 주소를 출력함
    this.viewData();
    //viewData(); //this를 붙이지 않아도 같은 클래스 안에 매서드를 호출 가능함
    }
    
    void viewData(){
        System.out.println("viewData() 호출");
    }
    
}
public class ExecEx05{
    public static void main(String[] args){
        MethodEx05 ex05 = new MethodEx05();
        ex05.printData("홍길동");
        ex05.printData();
        System.out.println("ex05 : "+ex05);  
    }
}


7
class MethodEx06{
    //자동으로 생성되는 생성자 : 디폴트 생성자
    //클래스 이를과 같음
    //리턴타입이 앞에 없음, 리턴을 할 수 없음
    MethodEx06(){
        System.out.println("디폴트 생성자 호출"); //밑에서 호출하지 않아도 클래스 생성시 자동적으로 호출됨
    }
}
public class ExecEx06{
    public static void main(String[] args){
        MethodEx06 ex06 = new MethodEx06();
        //Methodex06()
        //클래스명() : 생성자 (메서드) constructor
    }
}


8
class MethodEx07{
    String data1;
    //생성자 메서드 디폴트
    MethodEx07(){
        this.data1="홍길동";  //멤버필드 값을 초기화
        System.out.println("디폴트 생성자 호출");
    }
    //생성자 overloading
    MethodEx07(String data1){
        this(); //생성자에서 생성자를 호출 가능 //첫줄에 적어야 함
        this.data1=data1;  //외부에서 받은 인자로 멤버필드 값을 초기화 할 수 있음
        System.out.println("오버로딩 생성자 호출");
    }
    void viewData(){
        System.out.println(this.data1);
    }
}
public class ExecEx07{
    public static void main(String[] args){
        MethodEx07 ex07 = new MethodEx07();
        ex07.viewData();
        MethodEx07 ex077 = new MethodEx07("박문수");
        ex077.viewData();
    }
}


9
class MethodEx08{
    //여러개의 멤버 변수를 선택적으로 초기화
    String data1;
    String data2;
    
    MethodEx08(String data1, String data2){ //data1, 2 둘다 받아서 초기화
        this(data1);
        this.data2= data2;
    }
    MethodEx08(String data1){  //data1만 받아서 초기화
        this.data1= data1;
        this.data2= "기본값";
    }
}
public class ExecEx08{
    public static void main(String[] args){
        MethodEx08 ex01 = new MethodEx08("박문수", "홍길동");
        MethodEx08 ex02 = new MethodEx08("박문수");
        System.out.println(ex01.data1);
        System.out.println(ex01.data2);
        System.out.println(ex02.data1);
        System.out.println(ex02.data2);
    }
}


10
class VariableEx01{
    // 인스턴스는 괄호가 끝나면 메모리에서 지워짐
    String data1 = "홍길동";
    // static 은 메모리상 저장구역이 다름
    // 인스턴스 하기전에 먼저 메모리를 잡아둠
    // static 은 프로그램 끝까지 메모리를 잡아두기 때문에 될수 있는 한 쓰지 않는 것이 좋음
    // static 은 class간에 통신수단으로 사용됨 //공유데이터라고 불림
    static String data2= "박문수";
    
    void viewData1(){
        System.out.println("viewData1() 호출");
        System.out.println(data1);
        System.out.println(data2);
    }
    static void viewData2(){
        System.out.println("viewData2() 호출");
        //System.out.println(data1); static 안에서는 인스턴스 멤버 변수를 쓸수 없음
        //System.out.println(this.data1); static 안에서는 this라는 개념이 없음
        System.out.println(data2);
    }
}

public class MainEx01{
    public static void main(String[] args){
        VariableEx01 v = new VariableEx01();
        System.out.println(v.data1); //인스턴스 멤버 필드 부르기
        v.viewData1();
        System.out.println(VariableEx01.data2); //static 멤버 필드 부르기
        VariableEx01.viewData2();
    }
}


11
class Data{
    static String data1 = "홍길동";  //static 필드는 클래스 간의 공유데이터
}

class StudentA{
    void viewData(){
       System.out.println(Data.data1);
    }
}
class StudentB{
    void viewData(){
       System.out.println(Data.data1);
    }
}
public class MainEx02{
    public static void main(String[] args){
        StudentA s1 = new StudentA();
        StudentB s2 = new StudentB();
        
        s1.viewData();
        s2.viewData();
        Data.data1= "박문수";
        s1.viewData();
        s2.viewData();
    }
}


12
class TestEx{
    String data1= "홍길동";
    public String data2="박문수";
    private String data3= "강감찬";
    
    //매서드 //setter //getter //매서드를 통해서 private데이터에 접근하도록 만들 수 있음
    //매서드 안에 조건문을 걸어서 특정 조건을 설정해서 접근제어가능
    //set + 멤버변수명 : 입력
    //get + 멤버변수명 : 출력
    void setData3(String data3){
        this.data3=data3;
    }
    String getData3(){
        return data3;
    }
}

public class MainEx03{
    public static void main(String[] args){
        TestEx ex= new TestEx();
        System.out.println(ex.data1);
        System.out.println(ex.data2);
        //System.out.println(ex.data3);  // private 데이터에 접근 불가
        
        ex.setData3("박보영"); //set 매소드를 사용해서 private 데이터 초기화 가능
        String data = ex.getData3(); //get 메소드를 사용해서 private 데이터 출력 가능
        System.out.println(data);
    }
}


13
//버블소트
//첫번째 2개 인수 부터 마지막 2개인수까지 차례로 비교를 해서 큰 인수가 뒤로 가게 한다
//더이상 바꿀게 없으면 멈춘다
class UtilEx{
     int[] bubblesortAsc(int ... nums){
        int perfect=0;
        while(perfect<nums.length-1){
            perfect=0;
            for(int i=0; i<nums.length-1;i++){
                if(nums[i]>nums[i+1]){
                    int a=nums[i+1];
                    nums[i+1]=nums[i];
                    nums[i]=a;
                }else {
                    perfect++;
                }
            }
        }
        return nums;
    }
}

public class MainEx04{
    public static void main(String[] args){
        UtilEx ex = new UtilEx();
        int[] results = ex.bubblesortAsc(4,54,13,2,12,7,53,4,3,86,8,4);
        for(int result : results){
            System.out.print(result +"\t");
        }
    }
}


댓글 없음:

댓글 쓰기