jnk1m 2022. 7. 14. 09:01

C 언어 프로그래밍

유닉스 바쉬셀 코드가 아주 예쁘다..

 

객체에 동작을 표현하기 

함수는 특정한 동작. 값을 넣으면 값이 튀어나오는 것. function: 기능. 동작

메서드는 클래스 안에서 어떠한 동작을 표현할 수 있는 것

자바나 씨샵 클래스 안에서 클래스의 동작을 설명하기 때문에.

 

메서드는 동작을 구현하기 위한 것

메서드가 로드되면 전용 스택이 하나 생김. 메서드는 한번 종료되면 다시 액세스할 수 없다. 

 

지역 변수

전역 변수

 

알고리즘은 일단 플로우 차트를 그려보고 정리가 되면 코드를 짜라..

 

자바는 주소값을 절대로 넘길 수 없다. 자바는 무조건 값을 복사해서 전달!! 중요함.

(C, C#은 주소값을 넘길 수 있다. 같은 jvm을 쓰는 코틀린은 되지만 자바는 안됨.)

 

객체 지향을 쓰는 근본적인 이유: 재사용성 때문

재사용이 가능하게 하려면 추상화, 설계를 잘해야 함.

다형성이 중요함. 같은 타입의 객체가 다른 방식으로 작동하게 만드는 것. 

 

자바 상수 final

c에서는 const

 

파라미터를 던지고 값에 따라 값이 변할 때

 

클래스 안에 있어서 동작하기 때문에 메서드라고 부르는거지 사실 메서드와 함수는 동일하다..?

 

같은 타입의 뭔가가 다른 동작을 하는 것이 다형성


1. 메서드

public class page38 {
    
    enum TimeofDay {Morning, Afternoon, Evening}

    static void greet(){
        System.out.println("Hello");
    }
    static void greet(String name){
        System.out.println("Hello "+name);
    }
    static void greet(String name, TimeofDay timeofDay){
        String message ="";
        switch(timeofDay){
            case Morning:
                message = "Good morning, ";
                break;
            case Afternoon:
                message = "Good Afternoon, ";
                break;
            case Evening:
                message = "Good Evening, ";
                break;
        }
        System.out.println(message + name);
    }
    public static void main(String[] args){
        greet();
        greet("Dave");
        greet("Taylor", TimeofDay.Evening);
    }
    
}

 

int returnAInt(){
    return 1;
}
int i = returnAInt(); //

String hello(String name){
    return "Hello, "+name;
}
System.out.print(i);
String s = hello("Dave");
System.out.print(s);

2. C#에서 주소 전달을 통해 값을 스왑하기

class sample {
    static void process(ref int i){
        System.Console.WriteLine(i);
        i += 5;
        System.Console.WriteLine(i);
    }

    public static void swap(ref int i, ref int j){
        int temp = i;
        i = j;
        j=temp;
    }

    public static void Main(){
        // int i =5;
        // process(ref i);
        // System.Console.WriteLine(i);
        int i =5;
        int j =10;
        swap(ref i,ref j);
        Console.WriteLine("{0}, {1}",i,j);
    }
}

 

3. 자바에서 배열 이용하여 값 스왑하기

public class swapJava {
    public static void swap(int[] arr){
        int temp = arr[0];
        arr[0] = arr[1];
        arr[1] = temp;
    }
    public static void main(String[] args){
        int a = 10;
        int b = 1;
        int[] arr ={a,b};

        swap(arr);

        System.out.println(arr[0]+" "+arr[1]);
    }
}

 

4. 자바에서 연산 우선 순위 이용하여 값 스왑하기

public class trickSwap {
    private static Integer Swap(Integer original, Integer willBeChanged) {
        return original;
    }
    public static void main(String args[]) {
        Integer a = new Integer(10);
        Integer b = new Integer(20);

        // 호출 시 전달인자에서 a = b, 바뀌기 전의 a를 반환하므로 b = a
        b = Swap(a, a = b);

        System.out.println(a + " " + b);
    }
}

 

5. WhilteTest.java 숫자 0이 들어오기 전까지 계속 입력을 받는다

import java.util.Scanner;

public class WhileTest{
    public static void main(String [] args){
        Scanner scanner = new Scanner(System.in);
        int[] array = new int[10];
        int index =0;
        while(true){
            try{
                System.out.println("Please enter a digit ( 0: EXIT)");
                String line = scanner.nextLine();
                int inputInt = Integer.parseInt(line);
                if (inputInt == 0){
                    break;
                }
                printIntArray(array);
                
                array[index] = inputInt;
                index++;
                if(array[index] > array.length){//배열 크기보다 더  인덱스 값이 더  커지면 종료해야됨 이부분 나중에 다시 봐..
                    break;
                }
         }catch(ArithmeticException e){
            System.out.println("Please enter digit!");
         }
         catch(NumberFormatException e){
            System.out.println("Please enter digit!");
         }
         
        }
    }
    // 재사용성이 높은 코드니 메서드로 만들자
    private static void printIntArray(int[] array){ 
        for(int i:array){
            System.out.print(i+"");
        }
        System.out.println();

    }


}

1. Adder

class Adder {
    public int apply(int right, int left) {
        return right + left;
    }
}

 

2. Multiplier

public class Multiplier {
    public int apply(int left, int right) {
        return left * right;
    }
}

3. Algorithm

import java.util.Scanner;


public class Algorithm {
    // To-do add sigma method here
    public static int sigma(int begin, int end, int step){
        // int result=0;  //처음 코드
        // for(int i = begin; i <= end ; i+=step){
        //     result = result + i;
        // }
        // return result;
        return accumulate(new Adder(), 0, begin, end, step); //최종 코드
    }
    // To-do add pi method here
    public static int pi(int begin, int end, int step){
        // int result=1; //처음 코드
        // for(int i = begin; i <= end ; i+=step){
        //     result = result * i;
        // }
        // return result;
        return accumulate(new Multiplier(), 1, begin, end, step);
    }
    // To-do add accumulate method here
    public static int accumulate(Adder adder, int init, int begin, int end, int step){
        int result= init;
        for(int next = begin; next <= end ; next += step){
            result = adder.apply(result, next);
        }
        return result;
    }
    // To-do add overloaded accumulate method here
    public static int accumulate(Multiplier binder, int init, int begin, int end, int step){
        int result= init;
        for(int next = begin; next <= end ; next += step){
            result = binder.apply(result, next);
        }
        return result;
    }

    public static void main(String[] args) {
       
        // for(int i=0;i<10;i++){
        //     sum += i;
        // }

        // System.out.println(sum);
        // System.out.println(accumulate(new Adder(), 0, 1, 10, 1));
        // System.out.println(accumulate(new Multiplier(), 1, 1, 10, 2));
        System.out.println(sigma(1, 10, 2));
        System.out.println(pi(1, 20, 3));
      
        
        
    }
}