자바 컴파일러는 어떤 위험 요소 때문에 프로그램에 문제가 생기는 것을 원하지 않습니다. 그렇기 때문에 자바 프로그래머는 그래서 위험 요소가 있는 메소드를 호출할 때 만약의 경우에 어떻게 행동할 지를 미리 알려줘야 합니다. 그러기 위해서는 호출하는 메소드의 위험요소에 대해 알고 있어야 하고 위험하다는 것을 인지하고 나면 만약을 대비해 실패했을 경우 그 실패 상황을 처리할 수 있는 코드를 만들어야 합니다. 컴파일러는 예외적인 상황이 발생하는 것을 싫어합니다. 하지만 위험한 코드를 try/catch 문으로 포장해 주면 컴파일러는 아무 불평도 하지 않습니다. try/catch 블록은 호출할 메소드에서 예외와 관련된 일이 일어날 수 있다는 것을 알고 있고, 그에 대한 대비가 되어 있음을 알려주는 역할을 합니다. ..
지금까지 우리가 만든 메소드를 사용하기 위해서는 해당하는 객체를 생성하고 그 객체를 통해 메소드를 호출해야 했습니다. 하지만 작동 방식이 똑같은 메소드를 애플리케이션에서 계속해서 사용하고 있다면 아무래도 사용할 때 마다 객체를 생성하는 것은 비효율적입니다. 메모리에 고정된 영역에 그런 메소드를 위치시켜놓고 계속해서 사용할 수 있다면 훨씬 더 효율적일 것 같습니다. 자바는 그런 상황에 static(정적) method를 제공합니다. 클래스 로더가 클래스를 로딩할 때 정적 변수와 메소드를 저장하는 공간을 따로 할당하는데 프로세스가 종료될 때 까지 이 위치가 변하지 않기 때문에 ‘정적’이라는 표현을 사용합니다. 이처럼 위치가 고정적이기 때문에 어떤 클래스에서든 접근이 가능한 것입니다. static 매서드를 사용..
상태는 행동에 영향을 끼치고 행동은 상태에 영향을 끼칩니다. 객체에서 상태를 나타내는 것은 인스턴스 변수 이고 행동을 나타 내는 것은 메소드 입니다. 만약 Dog 클래스에서 객체의 사이즈에 따라 짓는 방법을 다르게 한다면 객체는 상태에 따라 다른 행동을 하는 것입니다. 반대로 메소드 안에서 인스턴스 변수를 수정한다면 행동에 따라 상태가 달라지는 것입니다. 메소드를 호출 할 때 호출하는 위치에서 필요한 값을 전달하는 것 도 가능합니다. 메소드에서 호출할 때 어떤 값을 전달할 수 있습니다. 만약 사각형의 넓이를 구하는 메소드가 있다고 한다면 그 너비와 높이 값을 인자로 전달할 수 있습니다. 이 때 호출 하는 쪽에서는 전달하는 값을 인자 argument 라고 부르고 메소드 안에서는 매개변수 parameter ..
상속을 이용하여 설계할 때는 공통적인 코드를 어떤 클래스에 넣은 다음, 다른 더 구체적인 클래스에 공통적인( 더 추상적인 ) 클래스가 상위 클래스라는 것을 알려주면 됩니다. 한 클래스가 다른 클래스를 상속하는 것을 하위 클래스가 상위 클래스로부터 상속받는다고 말합니다. 자바에서는 상위 클래스를 확장(extend)한다고 이야기 합니다. 삼각형은 도형이다 고양이는 동물이다 외과의사는 의사이다 이렇게 A는 B다 관계에 있으면 A 자리에 오는 클래스가 B 클래스를 확장했다고 할 수 있습니다. 이 A는 B다 관계는 한 방향으로만 흘러야 합니다. 하위 클래스가 상위 클래스를 더욱 더 구체화 한 형식이라면 상속을 활용할 수 있다. 깊이는 얼마든지 깊어질 수 있지만 효율성을 위해서(메모리 낭비) 적당한 깊이를 유지하는..
어린아이들이 가지고 노는 장난감 중에 정해진 모양의 구멍에 같은 모양의 조각들을 끼워넣는 장난감이 있습니다. 동그란 구멍에는 동그란 모양의 조각을 끼워 넣어야 합니다. 자바는 이 조각 끼우기 처럼 변수의 유형(type)을 철저하게 따집니다. 엉뚱한 값을 변수에 대입하면 컴파일러에서 잡아냅니다. 때문에 자바에서 변수를 선언 할 때는 그 유형과 이름이 반드시 필요합니다. 오른쪽에 있는 코드에서 int count는 count 라는 이름을 가진 int 형 변수를 선언 한 것입니다. 변수는 뭔가를 담아두기 위한 컵이라고 생각하면 됩니다. 하지만 담기는 내용물은 그 컵의 유형과 크기에 맞아야 합니다. 같은 모양의 컵이라도 크기가 다를 수 있는 것 처럼 자바의 유형도 그 크기가 다양하며 각각 이름이 붙어 있습니다. ..
클래스를 설계할 때는 프로그램에 들어가야 할 것과 그 프로그램이 어떤 역할을 하는지를 먼저 생각 해 봐야 합니다. 객체지향 프로그래밍에서프로그램에 들어가야 할 것은 객체가 자신에 대해 ‘아는 것’ 이라고 할 수 있습니다. 프로그램이 하는 역할은 객체에서 ‘하는 일’ 이라고 할 수 있습니다. 객체에서 아는 것을 인스턴스 변수라고 하고 객체에서 하는 것을 메소드 라고 합니다. 인스턴스 변수는 객체의 상태를 나타내고 메소드는 객체에서 할 수 있는 일을 나타냅니다. 간단하게 예를 들어 보겠습니다. Dog 라는 클래스를 만든다고 생각 해 보겠습니다. 현실세계에서 개는 더 많은 정보를 가지고 더 많은 행동들을 할 수 있지만최대한 단순화 해서 공통적인 기능만 뽑아 보겠습니다. Dog 라는 클래스에서 Dog 객체에 대..
그림을 참고하면 위에서 아래로 내려가는 과정을 수행한다고 보면 됩니다. 컴파일러에서 만들어진 바이트 코드가 저장된 class 파일을 class loader가 runtime data area에 적재합니다. Runtime data area 는 운영체제 위에서 JVM이 할당받는 메모리 영역입니다. class loader에서 준비한 데이터를 보관하는 저장소라고 할 수 있습니다. 그리고 이것을 Eexcution Engine으로 실행합니다. 클래스 로더는 한꺼번에 모든 클래스를 다 로드하지 않고 요청 되는 순간 동적으로 로드 합니다. 그리고 로딩 매커니즘을 보다 빠르게 동작하고 쉽게 확장할 수 있도록 하기 위해 계층구조로 이루어져 있는 특징이 있습니다. 클래스 로더가 클래스 로딩을 요청받게 되면 캐시, 부모 클래스..
- Total
- Today
- Yesterday
- 경고
- CONVENTIONS
- 크롬
- 자바스크립트 개론
- 유지보수
- 디자인패턴
- REST API
- DP
- 전략패턴
- 야근
- 동적계획법
- java
- 코딩의 기술
- Warning
- 몰라서망신
- RESTful
- Spring in Action
- html
- 클린코드
- 마르코프 연쇄
- was
- Markov
- 문장 생성기
- 로그
- Count
- markov chain
- 마르코프
- 자바스크립트개론
- GROUP BY
- restful api
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |