[Java 입문기] Java Script와 Java는 무엇이 다를까 1

파이·2021년 12월 20일
1

몇 개월간 JS와 React만 쪽만 공부했었는데,
이번에 나의 성장가능성(?)을 좋게 봐주신 회사에 취업하게 되었다.
그러나 회사 특성상 Java와 Spring을 배워야했다.

덕분에 Java를 배우면서
JS와 다른점과 중요하다고 생각한 부분에 대해 적어보려고 한다.

+ JDK와 eclipse 설치 등 셋팅은 추후에 다루도록 하자.

1. Java의 데이터 타입

사실 타입스크립트도 익혔던 터라, 데이터 타입에 거부감은 없었다. 그럼에도 다른 점이 몇가지 있어서 정리했다.

// 기본 데이터 타입
String one = "one"; // 문자열은 꼭 "더블쿼터"로 감싸준다.
int two = 2; // 정수 2
double three = 3; // 실수 3.0
char f = 'f' // 문자형 (한글자의 문자)

// int => String
int six = 6;
String strSix = Integer.toString(six);

// String => int
String five = "5";
int numFive = Integer.parseInt(five);

// String => double
String four = "4";
double doubleFour = Double.parseDouble(four);

유의할 점이 있다면

  1. string의 첫번째는 꼭 대문자로 작성
  2. 실수는 float가 아닌 double. 이상하다.
  3. '싱글쿼터'는 한글자의 문자를 표현하는데에 쓰이지만, 잘 안쓰인다.
  4. 타입의 변환은 Math처럼 메서드 형태로 쓰이며, 그 외에는 JS와 비슷하니 parseDouble만 좀 유의하자.

2. Java, Method의 사용

정확히는 모르지만, 지금까지 익힌 내용에 따르면 따로 function을 사용하지 않고, 무조건 Class 안에서 Method 형태로 함수를 이용한다.
그래서 일반적으로,

public class outerClass {
	
    public Static String testVar = "test var"; // 전역변수

	// 메인 메서드
      public static void main (String[] args) { 
          String target = "문자열"; // 메서드 지역변수
          printMethod(target);
          printMethod(testVar);
          ...
    }
    
    // 함수처럼 사용할 메서드
      public static void printMethod (String target) {
          System.out.println(target);
      }
}

메서드를 활용할 때, 다른 메서드를 끌어다쓰는 메인 메서드의 밖에 메서드를 정의한다. 때문에 인자(args)를 받는 메서드는 전역이나 지역변수를 잘 이해하여 사용하여야 한다.

3. Java의 비교문, ==과 equals

JS에선 타입 지정이 따로 없기 때문에, ===으로 비교문을 사용한다.
그러나 Java에선 크게 == equals 두 가지의 비교문이 있는데, 이를 알아보자.

A. ==는 주소를 비교한다.

String a = "JAVA";
String b = "JAVA";
String c = a;
String d = new String("JAVA");

System.out.println( a == b );  // true **        
System.out.println( b == c );  // true
System.out.println( c == d );  // false   
System.out.println( a == d ); // false

== 는 데이터가 할당된 주소를 비교한다.
때문에 String a = "JAVA";와, new Stirng을 통해 새로 할당한 d가 false를 반환한다.
여기서 독특한 점이 있는데,
그럼 a와 b는 왜 true일까?

이유는 String Pool 때문이다.

여기서 보다시피, new ... 로 변수를 지정한 값들은 변수를 지정할 때 마다 데이터의 주소를 새로 할당해준다.
그러나 위 코드의 a, b나 사진의 apple처럼 new를 사용하지 않고 직접 할당할 경우 String Pool에서 관리하게 된다.
때문에 직접 할당한 값들은 변수의 값이 같다면, 같은 주소를 공유한다.

String a = "JAVA";
String b = "JAVA";
String c = "JAVA";
...
String z = "JAVA";
// 어떤 값을 ==로 비교하든 값은 true로 나온다.

B. equals는 값 자체를 비교한다.

일반적으로 Java에서 많이 사용하는 비교문이며, 심플하게 값 자체를 비교한다. (Call By Value 라고도 하네용)
때문에,

String a = "JAVA";
String b = "JAVA";
String c = a;
String d = new String("JAVA");

System.out.println( a.equals(b) );  // true
System.out.println( b.equals(c) );  // true   
System.out.println( c.equals(d) );  // true

어떤 형식으로 할당해주었든,
어떤 주소에 할당되어있든 값 자체는 모두 "JAVA"로 같기 때문에 모두 true를 반환한다.


사실 처음엔 static이나 public등 보이는 부분이 굉장히 많이 달랐기 때문에 혼란스러웠었는데, 정리한 내용을 바탕으로 다시 보니 같은 부분이 여러번 혼란스럽게 느꼈던 부분도 있는 것 같다.
다음은 Java에서 중요하다고 알려진 Class와 Instance에 대해 공부한 내용을 정리해봐야지.

profile
기록

0개의 댓글