본문 바로가기
카테고리 없음

Java 기초2(3/29)

by 황밤 2024. 3. 29.
728x90
반응형

프로그래밍이란? 엔지니어란?

즉, 과학적인 원리를 사용하여 무언가를 설계 혹은 제작하는 직업이라고 합니다.

그렇다면 SW developer vs SW engineer 는 어떤 차이가 있는가?

  • 개발자가 진화하면 그때부터 엔지니어~~

RESTful(Represetational State Transfer)

무엇인가를 표현하는 상태(객체의 상태의 value)를 전송하는 것

Dog myDog = new Dog()
// myDog라는 reference 변수를 생성하며, Class의 type을 가져옴
// new Dog() 는 JVM에게 Dog의 객체를 위한 공간을 할당하라고 알려줌

// = 을 통해서 myDog라는 변수는 Dog라는 객체를 가리키게 되는 것임
// 즉 reference variable myDog 를 new Dog에 할당하는 것

Bicycle 클래스

class Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

BicycleDemo 클래스

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

        // Create two different 
        // Bicycle objects
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();
				Bicycle bike3 = bike1; -> bike3에 bike1(초기 bike1)의 값을 복사
				bike1 = new Bicycle(); -> 초기화
				bike3 = bike1; -> bike3의 값을 초기화
				//이로인해서 reference variable을 갖지 못한 객체는 메모리상에서 소멸됨.
        // Invoke methods on 
        // those objects
        bike1.changeCadence(50);
        bike1.speedUp(10);
				bike3.speedUp(20);
        bike1.changeGear(2);
        bike1.printStates();

        bike2.changeCadence(50);
        bike2.speedUp(10);
        bike2.changeGear(2);
        bike2.changeCadence(40);
        bike2.speedUp(10);
        bike2.changeGear(3);
        bike2.printStates();
    }
}

이렇게 수정하게 되면 어떻게 될까요?

정리하면, bike3는 처음에 bike1(구) 의 값을 가졌다가 재할당된 bike1(신)에 의해 초기값으로 재할당 됩니다.

reference variable 과 object

  1. 상황 1
  • b, c 가 가리키는 객체에서 d가 c를 가리키면서, 2개의 객체와 3개의 레퍼런스 변수가 생김.
  • c 에 b를 대입하는 순간, c의 레퍼런스가 2에서 1로 변경되는 것임.
  1. 상황 2
  • b, c의 reference 변수는 1, 2의 객체를 각각 가리킨다.
  • b 의 reference가 2로 변경되면서 1의 객체는 garbage 행
  • c = null 이지만, b는 2의 객체를 가리키므로 2객체는 살아있다.
  • 이때 c에 메서드를 사용하면, error가 발생함. (대응되는 객체가 없기 때문.)

객체 참조 변수

int size = 27;
String name = "Fido";
Dog myDog = new Dog(name, size);
x = size - 5;
if (x < 15) myDog.bark(8);

while(x > 3) {
	myDog.paly();
}

int[] numList = {2, 4, 6, 8};
System.out.print("Hello");

try {
	readTheFile("myFile.txt");
}
catch (FileNotFoundException ex) {
	System.out.print("Not Found");
}

//프로그래밍에서는 예외처리, 즉 catch 문을 잘 작성하는 것이 중요함.

Anatomy of a class

public //접근에 대한 access를 모두에게
private //접근에 대한 access를 제한
class //뒤 이름은 class라는 것을 명시

static //이것은 나중에 다룹시다
void //return type, void는 리턴값이 없다는 뜻

  • 클래스를 변수로 만들어야 메서드와 state를 사용할 수 있는데, 변수로 지정하지 않은 경우에도 메서드와 state를 사용할 수 있게 할 수 있는 것이 static
  • 다시 말해 외부 Class 내의 객체를 사용할 때, static으로 지정되어있는 객체라면 다른 Class에서 바로 사용이 가능

Method

클래스 내에 정의된 객체가 어떻게 작동될 지를 나열한 것.

실행

java 의 jdk 에서 String[] args 인 경우에서는 클래스 이름 + String String 등으로 값을 전달할 수 있음.

식별자(Identifier)

  • 현재 다루고 있는 것을 명확히 해주는 것.
  • 패키지와 관련이 있음

Array (배열)

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Arrays;
import static java.lang.System.out;

public class ArrayCreator {
    private static String s = "java.math.BigInteger bi[] = { 123, 234, 345 }";
    private static Pattern p = Pattern.compile("^\\\\s*(\\\\S+)\\\\s*\\\\w+\\\\[\\\\].*\\\\{\\\\s*([^}]+)\\\\s*\\\\}");

    public static void main(String... args) {
        Matcher m = p.matcher(s);

        if (m.find()) {
            String cName = m.group(1);
            String[] cVals = m.group(2).split("[\\\\s,]+");
            int n = cVals.length;

            try {
                Class<?> c = Class.forName(cName);
                Object o = Array.newInstance(c, n);
                for (int i = 0; i < n; i++) {
                    String v = cVals[i];
                    Constructor ctor = c.getConstructor(String.class);
                    Object val = ctor.newInstance(v);
                    Array.set(o, i, val);
                }

                Object[] oo = (Object[])o;
                out.format("%s[] = %s%n", cName, Arrays.toString(oo));

            // production code should handle these exceptions more gracefully
            } catch (ClassNotFoundException x) {
                x.printStackTrace();
            } catch (NoSuchMethodException x) {
                x.printStackTrace();
            } catch (IllegalAccessException x) {
                x.printStackTrace();
            } catch (InstantiationException x) {
                x.printStackTrace();
            } catch (InvocationTargetException x) {
                x.printStackTrace();
            }
        }
    }
}
$ java ArrayCreator
java.math.BigInteger [] = [123, 234, 345]
import java.lang.reflect.Array;
import static java.lang.System.out;

public class CreateMatrix {
    public static void main(String... args) {
        Object matrix = Array.newInstance(int.class, 2, 2);
        Object row0 = Array.get(matrix, 0);
        Object row1 = Array.get(matrix, 1);

        Array.setInt(row0, 0, 1);
        Array.setInt(row0, 1, 2);
        Array.setInt(row1, 0, 3);
        Array.setInt(row1, 1, 4);

        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 2; j++)
                out.format("matrix[%d][%d] = %d%n", i, j, ((int[][])matrix)[i][j]);
    }
}
$ java CreateMatrix
matrix[0][0] = 1
matrix[0][1] = 2
matrix[1][0] = 3
matrix[1][1] = 4

// 아래 코드를 이용해서 같은 결과가 나오도록 처리가 가능함.

Object matrix = Array.newInstance(int.class, 2);
Object row0 = Array.newInstance(int.class, 2);
Object row1 = Array.newInstance(int.class, 2);

Array.setInt(row0, 0, 1);
Array.setInt(row0, 1, 2);
Array.setInt(row1, 0, 3);
Array.setInt(row1, 1, 4);

Array.set(matrix, 0, row0);
Array.set(matrix, 1, row1);

프로그래밍이란? 엔지니어란?

즉, 과학적인 원리를 사용하여 무언가를 설계 혹은 제작하는 직업이라고 합니다.

그렇다면 SW developer vs SW engineer 는 어떤 차이가 있는가?

  • 개발자가 진화하면 그때부터 엔지니어~~

RESTful(Represetational State Transfer)

무엇인가를 표현하는 상태(객체의 상태의 value)를 전송하는 것

Dog myDog = new Dog()
// myDog라는 reference 변수를 생성하며, Class의 type을 가져옴
// new Dog() 는 JVM에게 Dog의 객체를 위한 공간을 할당하라고 알려줌

// = 을 통해서 myDog라는 변수는 Dog라는 객체를 가리키게 되는 것임
// 즉 reference variable myDog 를 new Dog에 할당하는 것

Bicycle 클래스

class Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

BicycleDemo 클래스

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

        // Create two different 
        // Bicycle objects
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();
				Bicycle bike3 = bike1; -> bike3에 bike1(초기 bike1)의 값을 복사
				bike1 = new Bicycle(); -> 초기화
				bike3 = bike1; -> bike3의 값을 초기화
				//이로인해서 reference variable을 갖지 못한 객체는 메모리상에서 소멸됨.
        // Invoke methods on 
        // those objects
        bike1.changeCadence(50);
        bike1.speedUp(10);
				bike3.speedUp(20);
        bike1.changeGear(2);
        bike1.printStates();

        bike2.changeCadence(50);
        bike2.speedUp(10);
        bike2.changeGear(2);
        bike2.changeCadence(40);
        bike2.speedUp(10);
        bike2.changeGear(3);
        bike2.printStates();
    }
}

이렇게 수정하게 되면 어떻게 될까요?

정리하면, bike3는 처음에 bike1(구) 의 값을 가졌다가 재할당된 bike1(신)에 의해 초기값으로 재할당 됩니다.

reference variable 과 object

  1. 상황 1
  • b, c 가 가리키는 객체에서 d가 c를 가리키면서, 2개의 객체와 3개의 레퍼런스 변수가 생김.
  • c 에 b를 대입하는 순간, c의 레퍼런스가 2에서 1로 변경되는 것임.
  1. 상황 2
  • b, c의 reference 변수는 1, 2의 객체를 각각 가리킨다.
  • b 의 reference가 2로 변경되면서 1의 객체는 garbage 행
  • c = null 이지만, b는 2의 객체를 가리키므로 2객체는 살아있다.
  • 이때 c에 메서드를 사용하면, error가 발생함. (대응되는 객체가 없기 때문.)

객체 참조 변수

int size = 27;
String name = "Fido";
Dog myDog = new Dog(name, size);
x = size - 5;
if (x < 15) myDog.bark(8);

while(x > 3) {
	myDog.paly();
}

int[] numList = {2, 4, 6, 8};
System.out.print("Hello");

try {
	readTheFile("myFile.txt");
}
catch (FileNotFoundException ex) {
	System.out.print("Not Found");
}

//프로그래밍에서는 예외처리, 즉 catch 문을 잘 작성하는 것이 중요함.

Anatomy of a class

public //접근에 대한 access를 모두에게
private //접근에 대한 access를 제한
class //뒤 이름은 class라는 것을 명시

static //이것은 나중에 다룹시다
void //return type, void는 리턴값이 없다는 뜻

  • 클래스를 변수로 만들어야 메서드와 state를 사용할 수 있는데, 변수로 지정하지 않은 경우에도 메서드와 state를 사용할 수 있게 할 수 있는 것이 static
  • 다시 말해 외부 Class 내의 객체를 사용할 때, static으로 지정되어있는 객체라면 다른 Class에서 바로 사용이 가능

Method

클래스 내에 정의된 객체가 어떻게 작동될 지를 나열한 것.

실행

java 의 jdk 에서 String[] args 인 경우에서는 클래스 이름 + String String 등으로 값을 전달할 수 있음.

식별자(Identifier)

  • 현재 다루고 있는 것을 명확히 해주는 것.
  • 패키지와 관련이 있음

Array (배열)

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Arrays;
import static java.lang.System.out;

public class ArrayCreator {
    private static String s = "java.math.BigInteger bi[] = { 123, 234, 345 }";
    private static Pattern p = Pattern.compile("^\\\\s*(\\\\S+)\\\\s*\\\\w+\\\\[\\\\].*\\\\{\\\\s*([^}]+)\\\\s*\\\\}");

    public static void main(String... args) {
        Matcher m = p.matcher(s);

        if (m.find()) {
            String cName = m.group(1);
            String[] cVals = m.group(2).split("[\\\\s,]+");
            int n = cVals.length;

            try {
                Class<?> c = Class.forName(cName);
                Object o = Array.newInstance(c, n);
                for (int i = 0; i < n; i++) {
                    String v = cVals[i];
                    Constructor ctor = c.getConstructor(String.class);
                    Object val = ctor.newInstance(v);
                    Array.set(o, i, val);
                }

                Object[] oo = (Object[])o;
                out.format("%s[] = %s%n", cName, Arrays.toString(oo));

            // production code should handle these exceptions more gracefully
            } catch (ClassNotFoundException x) {
                x.printStackTrace();
            } catch (NoSuchMethodException x) {
                x.printStackTrace();
            } catch (IllegalAccessException x) {
                x.printStackTrace();
            } catch (InstantiationException x) {
                x.printStackTrace();
            } catch (InvocationTargetException x) {
                x.printStackTrace();
            }
        }
    }
}
$ java ArrayCreator
java.math.BigInteger [] = [123, 234, 345]
import java.lang.reflect.Array;
import static java.lang.System.out;

public class CreateMatrix {
    public static void main(String... args) {
        Object matrix = Array.newInstance(int.class, 2, 2);
        Object row0 = Array.get(matrix, 0);
        Object row1 = Array.get(matrix, 1);

        Array.setInt(row0, 0, 1);
        Array.setInt(row0, 1, 2);
        Array.setInt(row1, 0, 3);
        Array.setInt(row1, 1, 4);

        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 2; j++)
                out.format("matrix[%d][%d] = %d%n", i, j, ((int[][])matrix)[i][j]);
    }
}
$ java CreateMatrix
matrix[0][0] = 1
matrix[0][1] = 2
matrix[1][0] = 3
matrix[1][1] = 4

// 아래 코드를 이용해서 같은 결과가 나오도록 처리가 가능함.

Object matrix = Array.newInstance(int.class, 2);
Object row0 = Array.newInstance(int.class, 2);
Object row1 = Array.newInstance(int.class, 2);

Array.setInt(row0, 0, 1);
Array.setInt(row0, 1, 2);
Array.setInt(row1, 0, 3);
Array.setInt(row1, 1, 4);

Array.set(matrix, 0, row0);
Array.set(matrix, 1, row1);

프로그래밍이란? 엔지니어란?

즉, 과학적인 원리를 사용하여 무언가를 설계 혹은 제작하는 직업이라고 합니다.

그렇다면 SW developer vs SW engineer 는 어떤 차이가 있는가?

  • 개발자가 진화하면 그때부터 엔지니어~~

RESTful(Represetational State Transfer)

무엇인가를 표현하는 상태(객체의 상태의 value)를 전송하는 것

Dog myDog = new Dog()
// myDog라는 reference 변수를 생성하며, Class의 type을 가져옴
// new Dog() 는 JVM에게 Dog의 객체를 위한 공간을 할당하라고 알려줌

// = 을 통해서 myDog라는 변수는 Dog라는 객체를 가리키게 되는 것임
// 즉 reference variable myDog 를 new Dog에 할당하는 것

Bicycle 클래스

class Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

BicycleDemo 클래스

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

        // Create two different 
        // Bicycle objects
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();
				Bicycle bike3 = bike1; -> bike3에 bike1(초기 bike1)의 값을 복사
				bike1 = new Bicycle(); -> 초기화
				bike3 = bike1; -> bike3의 값을 초기화
				//이로인해서 reference variable을 갖지 못한 객체는 메모리상에서 소멸됨.
        // Invoke methods on 
        // those objects
        bike1.changeCadence(50);
        bike1.speedUp(10);
				bike3.speedUp(20);
        bike1.changeGear(2);
        bike1.printStates();

        bike2.changeCadence(50);
        bike2.speedUp(10);
        bike2.changeGear(2);
        bike2.changeCadence(40);
        bike2.speedUp(10);
        bike2.changeGear(3);
        bike2.printStates();
    }
}

이렇게 수정하게 되면 어떻게 될까요?

정리하면, bike3는 처음에 bike1(구) 의 값을 가졌다가 재할당된 bike1(신)에 의해 초기값으로 재할당 됩니다.

reference variable 과 object

  1. 상황 1
  • b, c 가 가리키는 객체에서 d가 c를 가리키면서, 2개의 객체와 3개의 레퍼런스 변수가 생김.
  • c 에 b를 대입하는 순간, c의 레퍼런스가 2에서 1로 변경되는 것임.
  1. 상황 2
  • b, c의 reference 변수는 1, 2의 객체를 각각 가리킨다.
  • b 의 reference가 2로 변경되면서 1의 객체는 garbage 행
  • c = null 이지만, b는 2의 객체를 가리키므로 2객체는 살아있다.
  • 이때 c에 메서드를 사용하면, error가 발생함. (대응되는 객체가 없기 때문.)

객체 참조 변수

int size = 27;
String name = "Fido";
Dog myDog = new Dog(name, size);
x = size - 5;
if (x < 15) myDog.bark(8);

while(x > 3) {
	myDog.paly();
}

int[] numList = {2, 4, 6, 8};
System.out.print("Hello");

try {
	readTheFile("myFile.txt");
}
catch (FileNotFoundException ex) {
	System.out.print("Not Found");
}

//프로그래밍에서는 예외처리, 즉 catch 문을 잘 작성하는 것이 중요함.

Anatomy of a class

public //접근에 대한 access를 모두에게
private //접근에 대한 access를 제한
class //뒤 이름은 class라는 것을 명시

static //이것은 나중에 다룹시다
void //return type, void는 리턴값이 없다는 뜻

  • 클래스를 변수로 만들어야 메서드와 state를 사용할 수 있는데, 변수로 지정하지 않은 경우에도 메서드와 state를 사용할 수 있게 할 수 있는 것이 static
  • 다시 말해 외부 Class 내의 객체를 사용할 때, static으로 지정되어있는 객체라면 다른 Class에서 바로 사용이 가능

Method

클래스 내에 정의된 객체가 어떻게 작동될 지를 나열한 것.

실행

java 의 jdk 에서 String[] args 인 경우에서는 클래스 이름 + String String 등으로 값을 전달할 수 있음.

식별자(Identifier)

  • 현재 다루고 있는 것을 명확히 해주는 것.
  • 패키지와 관련이 있음

Array (배열)

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Arrays;
import static java.lang.System.out;

public class ArrayCreator {
    private static String s = "java.math.BigInteger bi[] = { 123, 234, 345 }";
    private static Pattern p = Pattern.compile("^\\\\s*(\\\\S+)\\\\s*\\\\w+\\\\[\\\\].*\\\\{\\\\s*([^}]+)\\\\s*\\\\}");

    public static void main(String... args) {
        Matcher m = p.matcher(s);

        if (m.find()) {
            String cName = m.group(1);
            String[] cVals = m.group(2).split("[\\\\s,]+");
            int n = cVals.length;

            try {
                Class<?> c = Class.forName(cName);
                Object o = Array.newInstance(c, n);
                for (int i = 0; i < n; i++) {
                    String v = cVals[i];
                    Constructor ctor = c.getConstructor(String.class);
                    Object val = ctor.newInstance(v);
                    Array.set(o, i, val);
                }

                Object[] oo = (Object[])o;
                out.format("%s[] = %s%n", cName, Arrays.toString(oo));

            // production code should handle these exceptions more gracefully
            } catch (ClassNotFoundException x) {
                x.printStackTrace();
            } catch (NoSuchMethodException x) {
                x.printStackTrace();
            } catch (IllegalAccessException x) {
                x.printStackTrace();
            } catch (InstantiationException x) {
                x.printStackTrace();
            } catch (InvocationTargetException x) {
                x.printStackTrace();
            }
        }
    }
}
$ java ArrayCreator
java.math.BigInteger [] = [123, 234, 345]
import java.lang.reflect.Array;
import static java.lang.System.out;

public class CreateMatrix {
    public static void main(String... args) {
        Object matrix = Array.newInstance(int.class, 2, 2);
        Object row0 = Array.get(matrix, 0);
        Object row1 = Array.get(matrix, 1);

        Array.setInt(row0, 0, 1);
        Array.setInt(row0, 1, 2);
        Array.setInt(row1, 0, 3);
        Array.setInt(row1, 1, 4);

        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 2; j++)
                out.format("matrix[%d][%d] = %d%n", i, j, ((int[][])matrix)[i][j]);
    }
}
$ java CreateMatrix
matrix[0][0] = 1
matrix[0][1] = 2
matrix[1][0] = 3
matrix[1][1] = 4

// 아래 코드를 이용해서 같은 결과가 나오도록 처리가 가능함.

Object matrix = Array.newInstance(int.class, 2);
Object row0 = Array.newInstance(int.class, 2);
Object row1 = Array.newInstance(int.class, 2);

Array.setInt(row0, 0, 1);
Array.setInt(row0, 1, 2);
Array.setInt(row1, 0, 3);
Array.setInt(row1, 1, 4);

Array.set(matrix, 0, row0);
Array.set(matrix, 1, row1);

프로그래밍이란? 엔지니어란?

즉, 과학적인 원리를 사용하여 무언가를 설계 혹은 제작하는 직업이라고 합니다.

그렇다면 SW developer vs SW engineer 는 어떤 차이가 있는가?

  • 개발자가 진화하면 그때부터 엔지니어~~

RESTful(Represetational State Transfer)

무엇인가를 표현하는 상태(객체의 상태의 value)를 전송하는 것

Dog myDog = new Dog()
// myDog라는 reference 변수를 생성하며, Class의 type을 가져옴
// new Dog() 는 JVM에게 Dog의 객체를 위한 공간을 할당하라고 알려줌

// = 을 통해서 myDog라는 변수는 Dog라는 객체를 가리키게 되는 것임
// 즉 reference variable myDog 를 new Dog에 할당하는 것

Bicycle 클래스

class Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

BicycleDemo 클래스

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

        // Create two different 
        // Bicycle objects
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();
				Bicycle bike3 = bike1; -> bike3에 bike1(초기 bike1)의 값을 복사
				bike1 = new Bicycle(); -> 초기화
				bike3 = bike1; -> bike3의 값을 초기화
				//이로인해서 reference variable을 갖지 못한 객체는 메모리상에서 소멸됨.
        // Invoke methods on 
        // those objects
        bike1.changeCadence(50);
        bike1.speedUp(10);
				bike3.speedUp(20);
        bike1.changeGear(2);
        bike1.printStates();

        bike2.changeCadence(50);
        bike2.speedUp(10);
        bike2.changeGear(2);
        bike2.changeCadence(40);
        bike2.speedUp(10);
        bike2.changeGear(3);
        bike2.printStates();
    }
}

이렇게 수정하게 되면 어떻게 될까요?

정리하면, bike3는 처음에 bike1(구) 의 값을 가졌다가 재할당된 bike1(신)에 의해 초기값으로 재할당 됩니다.

reference variable 과 object

  1. 상황 1
  • b, c 가 가리키는 객체에서 d가 c를 가리키면서, 2개의 객체와 3개의 레퍼런스 변수가 생김.
  • c 에 b를 대입하는 순간, c의 레퍼런스가 2에서 1로 변경되는 것임.
  1. 상황 2
  • b, c의 reference 변수는 1, 2의 객체를 각각 가리킨다.
  • b 의 reference가 2로 변경되면서 1의 객체는 garbage 행
  • c = null 이지만, b는 2의 객체를 가리키므로 2객체는 살아있다.
  • 이때 c에 메서드를 사용하면, error가 발생함. (대응되는 객체가 없기 때문.)

객체 참조 변수

int size = 27;
String name = "Fido";
Dog myDog = new Dog(name, size);
x = size - 5;
if (x < 15) myDog.bark(8);

while(x > 3) {
	myDog.paly();
}

int[] numList = {2, 4, 6, 8};
System.out.print("Hello");

try {
	readTheFile("myFile.txt");
}
catch (FileNotFoundException ex) {
	System.out.print("Not Found");
}

//프로그래밍에서는 예외처리, 즉 catch 문을 잘 작성하는 것이 중요함.

Anatomy of a class

public //접근에 대한 access를 모두에게
private //접근에 대한 access를 제한
class //뒤 이름은 class라는 것을 명시

static //이것은 나중에 다룹시다
void //return type, void는 리턴값이 없다는 뜻

  • 클래스를 변수로 만들어야 메서드와 state를 사용할 수 있는데, 변수로 지정하지 않은 경우에도 메서드와 state를 사용할 수 있게 할 수 있는 것이 static
  • 다시 말해 외부 Class 내의 객체를 사용할 때, static으로 지정되어있는 객체라면 다른 Class에서 바로 사용이 가능

Method

클래스 내에 정의된 객체가 어떻게 작동될 지를 나열한 것.

실행

java 의 jdk 에서 String[] args 인 경우에서는 클래스 이름 + String String 등으로 값을 전달할 수 있음.

식별자(Identifier)

  • 현재 다루고 있는 것을 명확히 해주는 것.
  • 패키지와 관련이 있음

Array (배열)

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Arrays;
import static java.lang.System.out;

public class ArrayCreator {
    private static String s = "java.math.BigInteger bi[] = { 123, 234, 345 }";
    private static Pattern p = Pattern.compile("^\\\\s*(\\\\S+)\\\\s*\\\\w+\\\\[\\\\].*\\\\{\\\\s*([^}]+)\\\\s*\\\\}");

    public static void main(String... args) {
        Matcher m = p.matcher(s);

        if (m.find()) {
            String cName = m.group(1);
            String[] cVals = m.group(2).split("[\\\\s,]+");
            int n = cVals.length;

            try {
                Class<?> c = Class.forName(cName);
                Object o = Array.newInstance(c, n);
                for (int i = 0; i < n; i++) {
                    String v = cVals[i];
                    Constructor ctor = c.getConstructor(String.class);
                    Object val = ctor.newInstance(v);
                    Array.set(o, i, val);
                }

                Object[] oo = (Object[])o;
                out.format("%s[] = %s%n", cName, Arrays.toString(oo));

            // production code should handle these exceptions more gracefully
            } catch (ClassNotFoundException x) {
                x.printStackTrace();
            } catch (NoSuchMethodException x) {
                x.printStackTrace();
            } catch (IllegalAccessException x) {
                x.printStackTrace();
            } catch (InstantiationException x) {
                x.printStackTrace();
            } catch (InvocationTargetException x) {
                x.printStackTrace();
            }
        }
    }
}
$ java ArrayCreator
java.math.BigInteger [] = [123, 234, 345]
import java.lang.reflect.Array;
import static java.lang.System.out;

public class CreateMatrix {
    public static void main(String... args) {
        Object matrix = Array.newInstance(int.class, 2, 2);
        Object row0 = Array.get(matrix, 0);
        Object row1 = Array.get(matrix, 1);

        Array.setInt(row0, 0, 1);
        Array.setInt(row0, 1, 2);
        Array.setInt(row1, 0, 3);
        Array.setInt(row1, 1, 4);

        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 2; j++)
                out.format("matrix[%d][%d] = %d%n", i, j, ((int[][])matrix)[i][j]);
    }
}
$ java CreateMatrix
matrix[0][0] = 1
matrix[0][1] = 2
matrix[1][0] = 3
matrix[1][1] = 4

// 아래 코드를 이용해서 같은 결과가 나오도록 처리가 가능함.

Object matrix = Array.newInstance(int.class, 2);
Object row0 = Array.newInstance(int.class, 2);
Object row1 = Array.newInstance(int.class, 2);

Array.setInt(row0, 0, 1);
Array.setInt(row0, 1, 2);
Array.setInt(row1, 0, 3);
Array.setInt(row1, 1, 4);

Array.set(matrix, 0, row0);
Array.set(matrix, 1, row1);

프로그래밍이란? 엔지니어란?

즉, 과학적인 원리를 사용하여 무언가를 설계 혹은 제작하는 직업이라고 합니다.

그렇다면 SW developer vs SW engineer 는 어떤 차이가 있는가?

  • 개발자가 진화하면 그때부터 엔지니어~~

RESTful(Represetational State Transfer)

무엇인가를 표현하는 상태(객체의 상태의 value)를 전송하는 것

Dog myDog = new Dog()
// myDog라는 reference 변수를 생성하며, Class의 type을 가져옴
// new Dog() 는 JVM에게 Dog의 객체를 위한 공간을 할당하라고 알려줌

// = 을 통해서 myDog라는 변수는 Dog라는 객체를 가리키게 되는 것임
// 즉 reference variable myDog 를 new Dog에 할당하는 것

Bicycle 클래스

class Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

BicycleDemo 클래스

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

        // Create two different 
        // Bicycle objects
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();
				Bicycle bike3 = bike1; -> bike3에 bike1(초기 bike1)의 값을 복사
				bike1 = new Bicycle(); -> 초기화
				bike3 = bike1; -> bike3의 값을 초기화
				//이로인해서 reference variable을 갖지 못한 객체는 메모리상에서 소멸됨.
        // Invoke methods on 
        // those objects
        bike1.changeCadence(50);
        bike1.speedUp(10);
				bike3.speedUp(20);
        bike1.changeGear(2);
        bike1.printStates();

        bike2.changeCadence(50);
        bike2.speedUp(10);
        bike2.changeGear(2);
        bike2.changeCadence(40);
        bike2.speedUp(10);
        bike2.changeGear(3);
        bike2.printStates();
    }
}

이렇게 수정하게 되면 어떻게 될까요?

정리하면, bike3는 처음에 bike1(구) 의 값을 가졌다가 재할당된 bike1(신)에 의해 초기값으로 재할당 됩니다.

reference variable 과 object

  1. 상황 1
  • b, c 가 가리키는 객체에서 d가 c를 가리키면서, 2개의 객체와 3개의 레퍼런스 변수가 생김.
  • c 에 b를 대입하는 순간, c의 레퍼런스가 2에서 1로 변경되는 것임.
  1. 상황 2
  • b, c의 reference 변수는 1, 2의 객체를 각각 가리킨다.
  • b 의 reference가 2로 변경되면서 1의 객체는 garbage 행
  • c = null 이지만, b는 2의 객체를 가리키므로 2객체는 살아있다.
  • 이때 c에 메서드를 사용하면, error가 발생함. (대응되는 객체가 없기 때문.)

객체 참조 변수

int size = 27;
String name = "Fido";
Dog myDog = new Dog(name, size);
x = size - 5;
if (x < 15) myDog.bark(8);

while(x > 3) {
	myDog.paly();
}

int[] numList = {2, 4, 6, 8};
System.out.print("Hello");

try {
	readTheFile("myFile.txt");
}
catch (FileNotFoundException ex) {
	System.out.print("Not Found");
}

//프로그래밍에서는 예외처리, 즉 catch 문을 잘 작성하는 것이 중요함.

Anatomy of a class

public //접근에 대한 access를 모두에게
private //접근에 대한 access를 제한
class //뒤 이름은 class라는 것을 명시

static //이것은 나중에 다룹시다
void //return type, void는 리턴값이 없다는 뜻

  • 클래스를 변수로 만들어야 메서드와 state를 사용할 수 있는데, 변수로 지정하지 않은 경우에도 메서드와 state를 사용할 수 있게 할 수 있는 것이 static
  • 다시 말해 외부 Class 내의 객체를 사용할 때, static으로 지정되어있는 객체라면 다른 Class에서 바로 사용이 가능

Method

클래스 내에 정의된 객체가 어떻게 작동될 지를 나열한 것.

실행

java 의 jdk 에서 String[] args 인 경우에서는 클래스 이름 + String String 등으로 값을 전달할 수 있음.

식별자(Identifier)

  • 현재 다루고 있는 것을 명확히 해주는 것.
  • 패키지와 관련이 있음

Array (배열)

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Arrays;
import static java.lang.System.out;

public class ArrayCreator {
    private static String s = "java.math.BigInteger bi[] = { 123, 234, 345 }";
    private static Pattern p = Pattern.compile("^\\\\s*(\\\\S+)\\\\s*\\\\w+\\\\[\\\\].*\\\\{\\\\s*([^}]+)\\\\s*\\\\}");

    public static void main(String... args) {
        Matcher m = p.matcher(s);

        if (m.find()) {
            String cName = m.group(1);
            String[] cVals = m.group(2).split("[\\\\s,]+");
            int n = cVals.length;

            try {
                Class<?> c = Class.forName(cName);
                Object o = Array.newInstance(c, n);
                for (int i = 0; i < n; i++) {
                    String v = cVals[i];
                    Constructor ctor = c.getConstructor(String.class);
                    Object val = ctor.newInstance(v);
                    Array.set(o, i, val);
                }

                Object[] oo = (Object[])o;
                out.format("%s[] = %s%n", cName, Arrays.toString(oo));

            // production code should handle these exceptions more gracefully
            } catch (ClassNotFoundException x) {
                x.printStackTrace();
            } catch (NoSuchMethodException x) {
                x.printStackTrace();
            } catch (IllegalAccessException x) {
                x.printStackTrace();
            } catch (InstantiationException x) {
                x.printStackTrace();
            } catch (InvocationTargetException x) {
                x.printStackTrace();
            }
        }
    }
}
$ java ArrayCreator
java.math.BigInteger [] = [123, 234, 345]
import java.lang.reflect.Array;
import static java.lang.System.out;

public class CreateMatrix {
    public static void main(String... args) {
        Object matrix = Array.newInstance(int.class, 2, 2);
        Object row0 = Array.get(matrix, 0);
        Object row1 = Array.get(matrix, 1);

        Array.setInt(row0, 0, 1);
        Array.setInt(row0, 1, 2);
        Array.setInt(row1, 0, 3);
        Array.setInt(row1, 1, 4);

        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 2; j++)
                out.format("matrix[%d][%d] = %d%n", i, j, ((int[][])matrix)[i][j]);
    }
}
$ java CreateMatrix
matrix[0][0] = 1
matrix[0][1] = 2
matrix[1][0] = 3
matrix[1][1] = 4

// 아래 코드를 이용해서 같은 결과가 나오도록 처리가 가능함.

Object matrix = Array.newInstance(int.class, 2);
Object row0 = Array.newInstance(int.class, 2);
Object row1 = Array.newInstance(int.class, 2);

Array.setInt(row0, 0, 1);
Array.setInt(row0, 1, 2);
Array.setInt(row1, 0, 3);
Array.setInt(row1, 1, 4);

Array.set(matrix, 0, row0);
Array.set(matrix, 1, row1);

프로그래밍이란? 엔지니어란?

즉, 과학적인 원리를 사용하여 무언가를 설계 혹은 제작하는 직업이라고 합니다.

그렇다면 SW developer vs SW engineer 는 어떤 차이가 있는가?

  • 개발자가 진화하면 그때부터 엔지니어~~

RESTful(Represetational State Transfer)

무엇인가를 표현하는 상태(객체의 상태의 value)를 전송하는 것

Dog myDog = new Dog()
// myDog라는 reference 변수를 생성하며, Class의 type을 가져옴
// new Dog() 는 JVM에게 Dog의 객체를 위한 공간을 할당하라고 알려줌

// = 을 통해서 myDog라는 변수는 Dog라는 객체를 가리키게 되는 것임
// 즉 reference variable myDog 를 new Dog에 할당하는 것

Bicycle 클래스

class Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

    void changeCadence(int newValue) {
         cadence = newValue;
    }

    void changeGear(int newValue) {
         gear = newValue;
    }

    void speedUp(int increment) {
         speed = speed + increment;   
    }

    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

BicycleDemo 클래스

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

        // Create two different 
        // Bicycle objects
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();
				Bicycle bike3 = bike1; -> bike3에 bike1(초기 bike1)의 값을 복사
				bike1 = new Bicycle(); -> 초기화
				bike3 = bike1; -> bike3의 값을 초기화
				//이로인해서 reference variable을 갖지 못한 객체는 메모리상에서 소멸됨.
        // Invoke methods on 
        // those objects
        bike1.changeCadence(50);
        bike1.speedUp(10);
				bike3.speedUp(20);
        bike1.changeGear(2);
        bike1.printStates();

        bike2.changeCadence(50);
        bike2.speedUp(10);
        bike2.changeGear(2);
        bike2.changeCadence(40);
        bike2.speedUp(10);
        bike2.changeGear(3);
        bike2.printStates();
    }
}

이렇게 수정하게 되면 어떻게 될까요?

정리하면, bike3는 처음에 bike1(구) 의 값을 가졌다가 재할당된 bike1(신)에 의해 초기값으로 재할당 됩니다.

reference variable 과 object

  1. 상황 1
  • b, c 가 가리키는 객체에서 d가 c를 가리키면서, 2개의 객체와 3개의 레퍼런스 변수가 생김.
  • c 에 b를 대입하는 순간, c의 레퍼런스가 2에서 1로 변경되는 것임.
  1. 상황 2
  • b, c의 reference 변수는 1, 2의 객체를 각각 가리킨다.
  • b 의 reference가 2로 변경되면서 1의 객체는 garbage 행
  • c = null 이지만, b는 2의 객체를 가리키므로 2객체는 살아있다.
  • 이때 c에 메서드를 사용하면, error가 발생함. (대응되는 객체가 없기 때문.)

객체 참조 변수

int size = 27;
String name = "Fido";
Dog myDog = new Dog(name, size);
x = size - 5;
if (x < 15) myDog.bark(8);

while(x > 3) {
	myDog.paly();
}

int[] numList = {2, 4, 6, 8};
System.out.print("Hello");

try {
	readTheFile("myFile.txt");
}
catch (FileNotFoundException ex) {
	System.out.print("Not Found");
}

//프로그래밍에서는 예외처리, 즉 catch 문을 잘 작성하는 것이 중요함.

Anatomy of a class

public //접근에 대한 access를 모두에게
private //접근에 대한 access를 제한
class //뒤 이름은 class라는 것을 명시

static //이것은 나중에 다룹시다
void //return type, void는 리턴값이 없다는 뜻

  • 클래스를 변수로 만들어야 메서드와 state를 사용할 수 있는데, 변수로 지정하지 않은 경우에도 메서드와 state를 사용할 수 있게 할 수 있는 것이 static
  • 다시 말해 외부 Class 내의 객체를 사용할 때, static으로 지정되어있는 객체라면 다른 Class에서 바로 사용이 가능

Method

클래스 내에 정의된 객체가 어떻게 작동될 지를 나열한 것.

실행

java 의 jdk 에서 String[] args 인 경우에서는 클래스 이름 + String String 등으로 값을 전달할 수 있음.

식별자(Identifier)

  • 현재 다루고 있는 것을 명확히 해주는 것.
  • 패키지와 관련이 있음

Array (배열)

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Arrays;
import static java.lang.System.out;

public class ArrayCreator {
    private static String s = "java.math.BigInteger bi[] = { 123, 234, 345 }";
    private static Pattern p = Pattern.compile("^\\\\s*(\\\\S+)\\\\s*\\\\w+\\\\[\\\\].*\\\\{\\\\s*([^}]+)\\\\s*\\\\}");

    public static void main(String... args) {
        Matcher m = p.matcher(s);

        if (m.find()) {
            String cName = m.group(1);
            String[] cVals = m.group(2).split("[\\\\s,]+");
            int n = cVals.length;

            try {
                Class<?> c = Class.forName(cName);
                Object o = Array.newInstance(c, n);
                for (int i = 0; i < n; i++) {
                    String v = cVals[i];
                    Constructor ctor = c.getConstructor(String.class);
                    Object val = ctor.newInstance(v);
                    Array.set(o, i, val);
                }

                Object[] oo = (Object[])o;
                out.format("%s[] = %s%n", cName, Arrays.toString(oo));

            // production code should handle these exceptions more gracefully
            } catch (ClassNotFoundException x) {
                x.printStackTrace();
            } catch (NoSuchMethodException x) {
                x.printStackTrace();
            } catch (IllegalAccessException x) {
                x.printStackTrace();
            } catch (InstantiationException x) {
                x.printStackTrace();
            } catch (InvocationTargetException x) {
                x.printStackTrace();
            }
        }
    }
}
$ java ArrayCreator
java.math.BigInteger [] = [123, 234, 345]
import java.lang.reflect.Array;
import static java.lang.System.out;

public class CreateMatrix {
    public static void main(String... args) {
        Object matrix = Array.newInstance(int.class, 2, 2);
        Object row0 = Array.get(matrix, 0);
        Object row1 = Array.get(matrix, 1);

        Array.setInt(row0, 0, 1);
        Array.setInt(row0, 1, 2);
        Array.setInt(row1, 0, 3);
        Array.setInt(row1, 1, 4);

        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 2; j++)
                out.format("matrix[%d][%d] = %d%n", i, j, ((int[][])matrix)[i][j]);
    }
}
$ java CreateMatrix
matrix[0][0] = 1
matrix[0][1] = 2
matrix[1][0] = 3
matrix[1][1] = 4

// 아래 코드를 이용해서 같은 결과가 나오도록 처리가 가능함.

Object matrix = Array.newInstance(int.class, 2);
Object row0 = Array.newInstance(int.class, 2);
Object row1 = Array.newInstance(int.class, 2);

Array.setInt(row0, 0, 1);
Array.setInt(row0, 1, 2);
Array.setInt(row1, 0, 3);
Array.setInt(row1, 1, 4);

Array.set(matrix, 0, row0);
Array.set(matrix, 1, row1);
반응형
LIST