728x90

test

재귀함수 구현해보기 -> 피보나치 수열

public static void main(String[] args) {

                

                Scanner sc = new Scanner(System.in);

                System.out.print("n : ");

                int n = sc.nextInt();

                System.out.println("n번째 피보나치 수열값은 "+f(n));

                

        }

        

        static int f(int a) {

                if(a<=2) {

                        return 1;

                }else {

                        return f(a-1) +f(a-2);

                }

        }

n : 6

n번째 피보나치 수열값은8

 

-선택정렬

                  for(int i=0;i<arr.length;i++) {//내림차순 정렬

                        for(int j=i+1;j<arr.length;j++) {

                                if(arr[i][4]<arr[j][4]) {

                                        int temp[];

                                        temp = arr[i];

                                        arr[i] = arr[j];

                                        arr[j] = temp;

                                }

                        }

                }

 

**선택정렬을 재귀함수로 만들어보기.

        public static void selectionSort(int arr[],int start) {//외부for문

                if(start<arr.length-1) {

                        int min_index = start;

                        for(int i=start;i<arr.length;i++) {

                                if(arr[i]<arr[min_index]) min_index =i;

                        }

                        swap(arr, start, min_index);

                        selectionSort(arr, start+1); ->for{for(j=i+1;i<a.length;j++}

                }//for문 두개돌릴것을 외부for->메소드, 내부for를 재귀함수로 만들어버림.

                

        }

        public static void swap(int arr[],int index1, int index2) {

                int temp = arr[index1];

                arr[index1] = arr[index2];

                arr[index2] = temp;

        }

        

        public static void printArray(int arr[]) {

                for(int data : arr) {

                        System.out.print(data +", ");

                        }System.out.println();

        }

        public static void main(String[] args) {

                int arr[]= {3,6,2,8,4,1};

                printArray(arr);

                selectionSort(arr, 0);

                printArray(arr);

        }

3, 6, 2, 8, 4, 1,

1, 2, 3, 4, 6, 8,

 

★★★객체지향프로그램 : 객체들끼리 상호작용하기 위해 만듦.

  1. 객체를 만든다.

  2. 객체들끼리 상호작용한다.

상태와 행동으로 구분할 수 있는 것 ->객체

상태/기능 = 특성/행동

객체를 만드는 것이 중요한데 객체를 만들기 위해서는 클래스를 만들어야 함.

클래스를 통해 객체를 만듦.

공통된 데이터 구조와 기능을 추출 -> 클래스를 만들 수 있다.

변수와 메소드로 클래스를 표현함

뉴 연산자로 객체를 생성합니다.

객체의 타입 = 클래스 이름Account account = new accout;//레퍼런스값(주소값)이 들어가있음

새로운 객체 생성->변수와 메소드에 대한 독립적 메모리가 할당된다.

점을 통해서 주소값을 호출한다.

객체생성 - 생성자 : 파라미터를 전달하여 객체를 초기화시킴

생성자- 리턴형x(void), 클래스이름과 동일, 객체를 초기화하고 싶은만큼 생성자갯수생성

객체를 생성하면 디폴트생성자가 자동으로 생성되기 때문에. (파라미터 값이 하나도 없는)

임의로 다른 생성자로 만들면, JVM이 디폴트생성자값을 안만들어줘서 내가 직접 입력해놔야함. ->항상 디폴트생성자를 써주기.

디폴트생성자는 여러개 있을 수 있음(파라미터 값이 다름)

남이 만든 API를 사용할 때 생성자를 생성하는 방법, 생성자를 호출할때 API가 만들어 놓은ctrl+space, 자바API를 통해 생성자를 만들게 됨.

 

클래스로부터 각각 특징이 다른 객체를 생성한다.

붕어 : 객체(목표) , 붕어틀 : 클래스

어떤 객체를 만들 것인가 먼저 분석 -> 공통된 데이터 구조와 기능을 분석 ->클래스 생성

=객체를 생성하기 위해 클래스를 생성

 

  1. 객체추상화(필요로 하는 정보를 생각함)

  2. 클래스생성

  3. 클래스로부터 새로운 객체 생성(고유한 값을 가진 새로운 객체 생성)

 

MSA-서비스 중심. 전 세계 패러다임은 서비스 중심의 설계

우리나라는 데이터중심의 설계를 하고 있음.

 

금융 아직도 COBOL 사용함 -> 우리나라는 잘 안바뀜. 하나바꾸면 절대 안된다 함.

 

Q. Public은 언제 사용하는가?

Q. Static은 객체 생성 안하고도 클래스 사용할 때 사용.

static이 붙은 것은 클래스 변수, static이 붙지 않은 것은 인스턴스변수(객체)

 

Account account = new Account();//새로운 객체생성, 인스턴스화//새로운 메모리 할당됨//값이 각각달라짐

새로운 객체를 생성할때 -> 새로운 메모리가 할당되어서 값을 각각 입력할 수 있음.

 

3.지역변(매개변수)는 초기화해야만 오류가 안뜨는데

2.멤버변수(객체) = 주소값을 가지고 있음. (개별 속성)

멤버변수는 초기화안하고 객체생성만 해도 오류가 안뜸.

참조변수

1.클래스변수(앞에 static 붙여주면 됨) (공통 속성)

 

-클래스

소스파일 이름 : Account

public class Account {

        //공통된 데이터 구현

        //계좌번호, 소유주, 잔액 => 상태(특성) => 멤버변수(필드)

        String accountNo;

        String ownerName;

        int balance;

        

        //공통된 기능 => 행동(기능) => 멤버메서드(오퍼레이션)

        //입금하다. 출금하다.

        

        public void deposit(int amount) {

                balance += amount;

        }

        public int withdraw(int amount) {

                if(balance<amount) {

                        return 0;

                }

                balance -= amount;

                return amount;

        }

        public void print() {

                System.out.println("계좌번호: "+ accountNo);

                System.out.println("계좌주: "+ ownerName);

                System.out.println("계좌잔액: "+ balance);

        }

}

-객체(메인메소드)

public class AccountMain {

        public static void main(String[] args) {

                Account account = new Account();//객체생성, 인스턴스화//새로운 메모리 할당됨

                account.accountNo = "11111-1111"; //참조변수.멤버변수

                account.ownerName = "홍길동";

                account.balance = 10000;

                

                account.deposit(3000);

                account.print();

                account.withdraw(13000);

                account.print();

        }

}

계좌번호: 11111-1111

계좌주: 홍길동

계좌잔액: 13000

계좌번호: 11111-1111

계좌주: 홍길동

계좌잔액: 0

-객체 두개 생성

public class AccountMain {

        public static void main(String[] args) {

                Account account = new Account();//객체생성, 인스턴스화//새로운 메모리 할당됨

                account.accountNo = "11111-1111";//주소값을 가짐

                account.ownerName = "홍길동";

                account.balance = 10000;

                

                account.deposit(3000);

                account.print();

                

               Account account2 = new Account();//객체생성, 인스턴스화//새로운 메모리 할당됨

                account2.accountNo = "12345-1234";

                account2.ownerName = "박길동";

                account2.balance = 30000;

                account2.print();

        }

}

-객체(두개 이상일때 : 배열을 사용함)

                Account arr[] = {   //배열안에 객체를 넣으면 아주편리하다. 배열타입 = 객체타입

                new Account("111-111","홍길동",10000),   

                new Account("222-222","박길동",10000)    

        };

        

        for(int i=0;i<arr.length;i++) { 

                arr[i].print();

        }

계좌번호: 111-111

계좌주: 홍길동

계좌잔액: 10000

계좌번호: 222-222

계좌주: 박길동

계좌잔액: 10000

 

 

-객체지향 언어의 특징

  1. 코드의 재사용성이 높다

  2. 코드의 확장성이 높다

  3. 코드의 관리가 용이하다

  4. 신뢰성이 높은 프로그래밍을 가능하게 한다.

 

*생성자(constructor)

  1. 객체를 초기화 함. (멤버변수를 초기화한다.)

  2. 새로운 객체가 생성되면 자동으로 호출됨.

  3. 접근제어자(void) 안씀. 생성자이름 = 클래스이름, 파라미터 여러개 가능

  4. return o->메소드, return x ->생성자

생성자 위치 : 변수 밑, 메소드 위

Source - Generate Constructor using Fields(생성자 만들기)

 

public class Account {

  

      String accountNo;//멤버변수(인스턴스변수)

        String ownerName;

        int balance;

 

public Account() {}//디폴트 생성자 : 내가 생성자를 만들면 JVM이 디폴트생성자를 안만들어줌ㅠㅠ

초급 개발자가 자꾸 이 문장을 까먹음.

어떤 경우에도 에러가 나면 안됨.

 

===생성자부분=== public Account(String accountNo, String ownerName, int balance){//지역변수

                super();

                this.accountNo = accountNo;//위에있는 멤버변수=지역변수

                this.ownerName = ownerName;

                this.balance = balance;

        }

}

 

 

생성자 의미

  1. 내가 생성자를 만들었을 때 - account클래스를 만들었음- 객체초기화해야함(생성자만들기) 객체초기화역할

  2. 남이 만든 클래스를 사용할 때 - 객체생성할 수 있는 방법은 생성자를 주목해라!! 객체매뉴얼역할

 

객체를 생성할 수 있냐없냐의 키포인트는 생성자입니다.

잘만든 코드 : 메인함수에 코드 한줄. -> 그 생성자의 클래스 찾아감 -> 그 안에 있는 클래스의 생성자의 클래스를 또 찾아감. 

 =>객체지향

 

-Mission

public class BookCost {//책이름,정가,할인된가격 - 객체를 만들기 위한 클래스

        String book;

        int cost;

        int dc_cost;

        

        public BookCost() {}; //default 생성자

        

        

        public BookCost(String book, int cost) {

                super();

                this.book = book;

                this.cost = cost;

        }

        public void discount() {

                        if(cost>=30000) {

                                dc_cost = (int)(cost*0.75);

                        }else if(cost>=20000) {

                                dc_cost = (int)(cost*0.80);     

                        }else

                                dc_cost = (int)(cost*0.85);

        }

        

        

        public void print() {

                System.out.println(book + "교재의 정가는 "+ cost +"할인된 가격은 "+ dc_cost);

        }

}

 

public class BookCal {//객체만들기

        public static void main(String[] args) {//3권의 책을 만들기 위해 객체배열을 생성해야 함.

                int total = 0;

                

                BookCost arr[] = {

                                new BookCost("JAVA",30000),

                                new BookCost("JSP",25000),

                                new BookCost("Oracle",15000)

                                };

                for(int i=0;i<arr.length;i++) {

                        arr[i].discount();

                        arr[i].print();

                        total += arr[i].dc_cost;

        }

                System.out.println("총금액:" +total);

        }

        }

 

 

 

 

 

 

 

 

 

728x90

+ Recent posts