본문 바로가기
학교 공부/자바

[JAVA] 자바 첫 수업

by krapoi 2022. 3. 17.
반응형

오늘(2022-03-16) 자바 첫 수업에 들어갔다.

먼저 자바 수업을 할 때는 eclips를 쓴다고 한다.

평소에 나는 인텔리제이를 쓰기 때문에 옛날로 돌아가 이클립스를 써야 하나 싶었는데, 다행히 인텔리제이를 써도 된다고 한다.

 

먼저 이론을 들었다.

자바 컴파일

수업에서 인터프리터와 컴파일러의 차이를 알려 주었는데,

둘 다 코드에서 기계어로 번역하는 건 같지만, 인터프리터는 실행할 때마다 실행파일을 만들고,

컴파일러는 한 번만 만들어 준다.

 

이렇게만 보면 인터프리터를 쓰는 이유가 없는 것 같은데, 이렇게 계속 실행파일을 만드는 이유가 있다.

할 때마다 실행파일을 만드니 실행 속도는 느리지만 오류도 빨리 찾아진다고 한다.

 

자바는 컴파일을 한 다음 다시 인터프리터를 해준다고 한다. 컴파일 단계 = (. java ( 컴파일 ) -> class ( JRE )-> 실행파일

이렇게 만든 이유는 자바를 임베디드에 쓰려고 하였기 때문이다.

때문에 속도는 느려도 여러 분야에서 사용이 되기 때문에 많이 퍼진 언어라고 한다.

참고로 JRE는 Java Runtime Environment(자바 실행 환경)이다.

개발 패키지 명

개발을 할 때 내 코드를 공유하고 싶을 때가 있다.

이렇게 공유를 할 때 함수 이름이 겹치면 안 될 텐데, 이를 해결하는 방법은 패키지를 따로 나누는 것이다.

근데 패키지 이름도 겹칠 수가 있다.

이때 패키 이름이 겹치지 않게 약속한 것이 있는데(무조건 지켜야 하는 건 아니지만 지키면 좋다고 함.)

패키지 이름을 지을 때 자신이 쓰는 도매인을 쓰는 것이다.

 

실습

모든 언어에서 제일 기본적인 Hello World 출력하기를 메소드를 만들어해 보았다.

public void sayHello() {
		System.out.println("Hello World");
	}

음...

일단 기다려보자.

다음 메인클래스를 따로 만들어 sayHello를 실행시켜주었다.

public class HelloTester {
    public static void main(String[] args) {
        Hello hello = new Hello();
        hello.sayHello();
        hello.upgradeHello();
    }
}

저 upgradeHello는 내 옆에서 이상한 거 만들길래 비슷하게 하나 만든 것이다.

public void upgradeHello(){
        Consumer<String> o = System.out::println;
        o.accept("Consumer<String> o = System.out::println;\n" +
                "o.accept(\"Hello World!\");");
    }

코드를 보여주자면 그냥 컨슈머를 썼다.

 

쨋든 다시 메인에 대해 설명해 주자면 저런 식으로 Hello클래스를 new Hello 클래스로 정의를 해주고,

그 hello에. 을 붙여 sayHello를 사용해 주면 된다.

이걸 선생님께서는 유전자에 비유하시던데 Hello는 DNA이며 이 DNA로 hello라는 공룡을 만들어 sayHello를 시킨다고 설명해 주셨다.

 

그리고 선생님께서 클래스를 2개를 만든 이유도 알려 주셨다.

2개를 만든 이유는 메인 함수 안에서 모든 것을 짜지 않도록 하게 하기 위해서 2개를 만들었다고 하신다.

절차 지향보단 객체지향에 좀 더 중심을 주기 위함이라고 한다.

그리고 실행하는 클래스(main)와 사용하는 클래스(Hello)는 분리시키는 게 좋다고 한다.

그 이유는 재사용이 용이하며 유지보수에 뛰어나기 때문이다.

 

또 자바는 함수 이름이 겹칠 수 있는데, 이것도 조건이 있다고 한다.

조건은 구분이 되어야 한다 이다.

예를 들어 이름이 같아도 매개변수가 다르다던지 해야 한다는 소리이다.

 public void sayHello(){
        System.out.println("Hello World");
    }

 public void sayHello(String string){
        System.out.println("Hello " + string + "!");
    }

이런 식으로 말이다.

 

이렇게 함수를 하나 더 만들었는데 이름이 같은 함수를 만들었다.

main안에서는 이런 식으로 구분시키면 된다.

public static void main(String[] args) {
        Hello hello = new Hello();
        hello.sayHello();
        hello.sayHello("홍길동");
        }

당연히 매개변수로 구분하면 된다.

그리고 sayHello에서 겹치는 코드가 있어 정리를 했다.

    public void sayHello(){
        //System.out.println("Hello World");
        sayHello("World");
    }


    public void sayHello(String string){
        System.out.printf("Hello %s!\n",string);
    }

당연한 말이지만 잘 쓴 코드는 주석도 필요 없고 한눈에 뭘 하는지 보이는 코드이다.

선생님도 언어를 배우는 건 새로운 언어를 배우는 거지 실력이 느는 건 아니라고 했다.

이렇게 사소한 것에도 중복 코드를 없애는 것이 실력이 느는 길이라고 한다.

아 근데 이게 더 느리긴 함.

그래도 이렇게 하는 것이 좋다고 한다.

 

마지막으로 Dog클래스를 만들어 main에서 실행시켰다.

Dog클래스는 아래와 같다.

public class Dog {
    String name;
    String color;

    int age;

    public void makeSound(){
        System.out.println("멍멍");
    }
    public void eat(String food){
        System.out.printf("%s이(가) %s을(를) 먹는다.\n",name,food);
    }
    public void printInformation(){
        System.out.printf("이름 : %s\n" +
                "색깔 : %s\n" +
                "나이 : %d\n",name,color,age);
    }
}

그다음 메인에서 실행시킨 코드이다.

public static void main(String[] args) {
        Dog dog = new Dog();
        Dog cat = new Dog();

        dog.age = 14;
        dog.color = "Blue";
        dog.name = "dog";

        cat.age = 10;
        cat.name = "cat";
        cat.color = "White";

        dog.makeSound();
        dog.eat("호빵");
        dog.printInformation();

        cat.makeSound();
        cat.eat("츄르");
        cat.printInformation();
    }

그리고 cat클래스를 하나 더 만들어라라고 하셨는데 이거랑 거의 비슷해서 따로 올리진 않겠다.

이렇게 오늘 자바 첫 수업이 끝이 났다.

반응형

'학교 공부 > 자바' 카테고리의 다른 글

[JAVA] 자바 5번째 수업  (0) 2022.04.20
[JAVA] 자바 4번째 수업  (0) 2022.04.13
[JAVA] 자바 세번째 수업  (0) 2022.04.06