자바 Basic : 클래스, 객체, 메소드, 데이터 형변환

자바 컴파일 & 런타임 기본 구조

먼저 .java 클래스 파일을 컴파일해주는 컴파일러가 있고, 해당 컴파일러는 JVM이 이해할 수 있도록 .java 파일을 .class 파일, 즉 바이트코드 파일로 전환해준다.

그리고 변환된 바이트코드는 런타임 환경에서 클래스 로더에 의해 로드되고 JVM으로 넘어간다. 이때 오라클이 OS 별로 다르게 지원을 다 해주고 있기 때문에 OS 환경에 구애받지 않는 java 프로그래밍이 가능하다.

참고) 이더리움 코드 컴파일 & EVM 동작 구조

-이더리움 Remix IDE : Solidity Code를 IDE 환경에서 작성하고 EVM이 읽을 수 있도록 바로 컴파일까지 해주는 프로그램이다. 이더리움 프로그래밍에 관심있는 사람들은 한번 해보길. 외람되지만 이더리움 프로그램은 Gas 때문에 황서를 안보고는 제대로 할 수가 없다고 함..

자바에서의 클래스 기본 구조

Java는 객체 지향 언어로, 객체를 기준으로 프로그램이 동작한다. 그리고 하나의 java 프로그램은 여러개의 클래스로 구성되어 있고, 해당 클래스 안에는 여러개의 필드와 메소드가 객체를 기준으로 작성되어 있다.

아래 코드를 통해 클래스와 필드, 객체, 메소드의 구성을 살펴보자

public class Animal {
    String name;  // 필드
   
    public void setName(String name) { //출력값이 없는(void) 메소드
        this.name = name;
    }
    public static void main(String[] args){ // main 메소드 
    /* [main() 메소드의 의미]
특정 자바 프로그램이 실행되면 맨 먼저 main() 메소드를 찾아 그 안의 모든 명령문을 차례대로 실행
=> 따라서 하나의 자바 프로그램에는 main() 메소드를 가지는 클래스가 반드시 하나는 존재해야 함 (없으면 컴파일러에서 에러남)
*/
        Animal cat = new Animal();
        cat.setName("boby");
        Animal dog = new Animal();
        dog.setName("happy");
        
        System.out.println(cat.name);
        System.out.println(dog.name);
    }
}
  • 위 코드에서 cat은 Animal의 객체(또는 인스턴스)라고 표현하는 것이 가장 좋고, new는 새로운 객체를 생성할 때 사용함.
  • 위 코드를 실행하면 아래와 같은 결과값이 출력됨.
boby, happy

객체, 클래스, 메서드 구조를 활용한 간단 계산기

public class Test {
    public int sum(int a, int b) { 
    return a+b; // 입출력 둘다 존재하는 메서드 sum
}
    public static void main(String[] args) {
        int a = 3;
        int b = 4;
        
        Test myTest = new Test(); /* Test 클래스 내에 myTest라는 새로운 객체 생성 */
        int c = myTest.sum(a,b);
        
        System.out.println(c);
    }

}

메소드 Case 구분

  • 위 표처럼, 메소드는 입출력 값의 여부(binary)에 따라 총 4가지 케이스로 구분이 가능하다.
  • 참고로, 메소드의 리턴값은 오로지 return문에 의해서만 생성된다. println이 특정 메소드 안에 있다고 해서 해당 println문이 리턴을 의미하는 것은 전혀 아니다. 그리고 이 경우, void를 사용해서 리턴값이 없음을 명시해줘야 한다. (https://wikidocs.net/225)

그럼, 위 케이스별로 메소드가 어떻게 활용될 수 있는지 그 구조를 살펴보자.

Case 1. 입력 O & 출력 O (가장 기본)

Case 2. 입력 O & 출력 X (void)

Case 3. 입력 X & 출력 O

Case 4. 입력 X & 출력 X


데이터 타입 형변환 (Casting)

데이터 타입은 String, Int, Char 등 워낙 많이 사용되는 대표적인 것들만 일단 기억하기로 하고 데이터 형변환에 대한 개념을 잡아보자.

Casting은 상위 데이터 타입에서 하위 데이터 타입으로 데이터 타입을 변환할때 사용되는 스킬이다.

double에서 int로의 형변환

public class Casting {
    public static void main(String[] args) { 
       
        double a = 1.1;
        double b = 1;
        double b2 = (double) 1;
     		// 1을 할당함에도 불구하고, (double)을 기입해서 형변환 연산자를 적어줬기 때문에 오류 X
        System.out.println(b2);

위 코드에서 결과값은 1.0이 출력된다.

그러면, int를 String으로 바꾸고 싶으면 어떻게 할까? 생코 강의를 보면서 "개발은 언어에 익숙해지는 것이요, 문법만 들여다보고 있다고 해서 익숙해지지 않는다"는 것을 깨달았다.

오늘 옆에서 일하는 엔지니어가 React Native로 앱을 개발하면서 버튼 만드는 코드 스니펫을 검색하고 해당 코드를 복붙하는 것을 보고, 그리고 생코 이고잉 님도 int to String 코드를 검색 후 복붙하는 것을 보면서 일단은 언어 활용에 익숙해지는 것이 가장 중요하다는 결론을 내렸다. Fail-fast, Learn-fast하는 것.

아무튼 아래와 같이 int => String으로 형변환이 가능하다.

public class Casting {
 
    public static void main(String[] args) {
    
    Integer number = 123;
    String numericStr = "";
    numericStr = String.valueOf(number);
    System.out.println(numericStr);
    }
}

출력값은 123이 나온다. 다만, 이때의 123은 정수형의 숫자 데이터가 아니라 "문자(String)" 데이터이다.


참고 문헌

  • 생활코딩 Java1

    • 생활코딩은 너무 유명한데, Java 관련해서 가장 큰 그림을 가장 빠르게 볼 수 있는 정말정말 입문용 코스다. 자바로 안드로이드 앱 만들기 이건 꼭 학습하는게 좋을 듯?
  • 점프투 자바 객체, 메소드, 클래스 관련 내용

    • 가장 큰 뼈대로 생각하고 있는 위키. 전반적인 개념에 대한 설명을 잡기에 좋다.
  • TCP School 자바 수업

    • 여기 수업이 좋은게, 점프 투 자바보다 depth가 하나 더 들어간채로 개념 설명을 해주고 있다. 예를 들어, class를 좀 더 매크로하게 쪼개서 자바 프로그램 하나가 여러개의 class로 이루어져있으며 이러한 클래스는 한 개 이상의 필드(field)나 메소드(method)로 구성된다는 구성까지 논리적으로 알려줘서 자바 프로그램의 구성을 큰 그림에서 이해하기 쉽다.
    • 뿐만 아니라, System.out.println()의 정체에 대해서도 상세히 설명해준다. C언어의 printf() 함수나 다른 언어의 print 함수처럼 자바에서는 System이라는 표준 입출력 클래스를 정의하여 제공하고 있는데, 이러한 System 클래스는 java.lang 패키지에 포함되어 제공된다는 점도 앞서 말했던 자바의 클래스 구조를 한번 더 상기시켜준다.
    • 참고로 System 클래스에는 표준 입출력을 위해 System.in(입력), System.out(출력), System.err(오류)와 같은 입출력용 시스템 변수가 입력되어 있다.

좋은 웹페이지 즐겨찾기