본문 바로가기

Java/문법 및 이해

(15)
[JAVA] Call by value, Call by reference의 이해 자바를 사용하다보면 메서드에 값(primitive type)을 전달하는 것과 객체(reference type)를 전달하는 것과는 매우 큰 차이가 있다. 원시 타입과 참조 타입을 구별하고 이해하고 사용하는 것은 정말이지 너무나도 중요하다. Call by value 메서드를 호출할 때 값을 넘겨준다. 즉, 메서드를 호출하는 호출자(Caller)의 변수와 당하는 수신자(Callee)픠 파라미터는 복사된 서로 다른 변수이다. 값만을 전달하기 때문에 수신자와 파라미터를 수정해도 변수에는 아무런 영향이 없다. Call by reference 참조(주소)를 직접 전달한다. 참조를 넘기기 때문에 호출자의 변수와 수신자의 파라미터는 완전히 동일한 변수이다. 메서드 내에서 파라미터를 수정하면 그대로 원본 변수에도 반영된다..
[JAVA] final 키워드가 대체 무엇일까? 문법 공부를 하다보면 final이라는 키워드가 가끔 보인다. 그럼 final이라는건 대체 뭘까? 1. Final 자바 언어에서 오직 한 번만 할당할 수 있는 키워드가 있다. 그것이 바로 final이다. final로 선언된 변수가 할당되면 항상 같은 값을 가진다. 즉, 한번 할당되면 객체의 상태가 바뀌어도 final 변수는 매번 동일한 내용을 참조한다. 그러면 final 키워드는 어디에서 사용할까? final은 클래스, 메서드, 변수 각각에 다 붙을 수 있다. 2. final 클래스 public final class MyFinalClass{}// final 클래스 선언 public class ThisIsWrong extends MyFinalClass{}// 상속 불가 ! final이 붙어있는 클래스는 상속..
[JAVA] IS - A, HAS - A 자바에서 클래스를 생성하다 보면 다른 클래스를 상속하는 경우가 많다. 이럴 때 필요한 것이 IS - A 관계이다. 상속을 사용하지 않는 HAS-A관계도 있기 때문에 두 가지의 관계를 정리할 것이다. 1. IS - A 자바 내에서 어느 한 클래스가 다른 클래스를 상속받기 위해서는 IS-A관계를 사용해야 한다. IS-A (is a relationship, inheritance)는 일반적인 개념과 구체적인 개념의 관계이다. 위 처럼 Animal과 Human, Cow, Bird는 서로 상속 관계를 의미하는 사진이다. 코드로 보면, # Animal class class Animal { String name; void setName(String name) { this.name = name; } } # Human c..
[JAVA] 멤버 변수와 로컬 변수 변수는 데이터를 저장하는 공간인데, 자바의 변수는 크게 멤버 변수와 로컬 변수로 나뉜다. 1. 로컬 변수 (Local Variable) 로컬 변수는 메서드 내부에서 선언되는 변수이다. 사용 범위 역시 메서드 내부에서만 유효하다. 사용하는 메모리는 stack 메모리이며, 메서드가 호출될 때 생성되었다가 끝나면 소멸한다. 2. 멤버 변수 (Member Variable) 클래스 내부에 선언하며 해당 클래스의 속성과 특성을 나타낸다. 흔히 클래스는 인스턴스로 사용하는 경우가 많기 때문에 멤버변수를 인스턴스 변수라고 칭하는 경우가 많다. 멤버 변수는 클래스의 속성을 나타내면서 각각의 인스턴스 마다 다른 값을 갖게 할 용도로 사용한다. 사용범위는 해당 클래스 전체이다. private가 아니라면 참조변수를 이용해 다..
[JAVA] Primitive Type과 Reference Type 1. 타입(Type)이란? 우리는 현재 굉장히 많은 언어가 있는 시대에 살고 있다. 그렇다면 왜 계속해서 새로운 언어가 나올까? 새로운 언어가 나오면서도 데이터 타입도 조금씩 변화하고 있다. 그 이유는.. 기존 언어의 문제점을 보완하기 위해 새로운 언어가 등장하고 있다. 또한, 특정 여역에서 활용할 수 있는 언어로 특화되어서도 등장하고 있다. 자바 같은 경우도 처음에는 웹 개발을 목적으로 나온 것이 아니었다. 자바를 이용한 첫 애플리케이션은 자바 애플릿이라는 것이 있다. 결국 많은 문제로 인해 사라졌지만.. 남은건 웹 프론트를 버린 백엔드(spring)만이 남았다. 서론이 길었지만 이러한 많은 언어에서 공통점은 데이터 타입이다. 데이터 타입은 해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 ..
[Java] 자바의 예외처리 (Exception) 프로그램을 만들다 보면 수없이 많은 오류가 발생한다. 물론 오류가 발생하는 이유는 프로그램이 오동작을 하지 않기 하기 위한 자바의 배려이다. 하지만 때로는 이러한 오류를 무시하고 싶을 때도 있고, 오류가 날 때 그에 맞는 적절한 처리를 하고 싶을 때도 있다. 이에 자바는 try ... catch, throw 구문을 이용해 오류를 처리 해야한다. 1. 예외처리 아래는 예외처리를 위한 기본적인 아키텍처이다. try { ... } catch(예외1) { ... } catch(예외2) { ... } 예를 하나 들면, 숫자를 0으로 나누었을 때 발생하는 예외를 처리하려면 다음과 같이 할 수 있다. int c; try { c = 4 / 0; } catch(ArithmeticException e) { c = -1; ..
[Java] int와 Integer는 뭐가 다를까? 최근에 자바를 공부하고 있는데, 공부하면서 이상한 점을 발견했다. 파이썬에서는 고민조차 안했던 건데;;; int와 Integer는 대체 무슨 차이일까? 자바 코드 아키텍처도 살짝 다르게 작성하던데 왜 굳이 저거처럼 다르게 쓸까? 의미는 똑같아 보이는데;; 1. int 먼저, Int는 Primitive 자료형이다. 즉, 변수의 타입(data type) 이다. Primitive - 데이터를 가지는 자료형을 뜻하는 원시적이 자료형. - 메소드를 가지지 못한다. 앞서 변수의 타입으로 표현하였는데. 변수는 값을 저장할 수 있는 메모리 상의 공간을 의미한다. int a = 3; char firstName = "H"; 에서 a나 firstName은 변수가 되는 것이다. 그리고 그 앞에 적힌 int나 char가 변수의..