리터럴 값인 숫자 5는 int타입이다. 리터럴 값인 숫자 5L은 long타입이다. byte 크기: 1바이트 값의 범위: -2^(8-1) ~ 2^(8-1)-1 short 크기: 2바이트 값의 범위: -2^(16-1) ~ 2^(16-1)-1 int 크기: 4바이트 값의 범위: -2^(32-1) ~ 2^(32-1)-1 long 크기: 8바이트 값의 범위: -2^(64-1) ~ 2^(64-1)-1 float타입은 4byte 크기의 실수 값을 가질 수 있다. 리터럴 값인 숫자 5.2f는 float 타입이다. double타입은 8byte 크기의 실수 값을 가질 수 있다. 리터럴 값인 숫자 5.2는 double이다. float 크기: 4바이트 값의 범위: (3.4 X 10^-38) ~ (3.4 X 10^38) 지수의..
&&과 &, ||과 |의 결과는 같게 나오지만 JVM은 실행을 다르게 한다. &&일 경우에는 앞의 식이 거짓이면 뒤에있는 식은 실행하지 않는다. (한쪽만 거짓이어도 실행할 필요가 없기 때문에) &일 경우에는 앞의 식이 거짓이어도 뒤의 식이 실행된다. ||의 경우에는 앞의 식이 참일 경우에는 뒤의 식이 실행되지 않는다. |가 사용될 경우에는 앞의 식이 참일 경우라도 뒤의 식이 실행된다. 즉, 차이점은 앞의 식의 논리 연산 결과에 따라 뒤에 있는 식을 실행하느냐? 안하느냐?의 차이가 있다. 따라서 결과는 같게 나오지만, 뒤의 식에 수식 등이 들어갈 경우, 수식에 증가, 감소되는 식이 있으면 실행이 되고 안되고에 따라서 문제가 될 수도 있다. boolean 형 타입은 메모리를 얼마나 사용할까? 1byte(8b..
exclusive-or 또는 XOR 이라고 말한다. 2개의 식의 논리 값이 서로 다를 경우, 참이 된다. 아래의 식이 참이려면 한쪽은 참이고, 한쪽은 거짓이 나와야 한다. a > 10 ^ a < 20 예를 들어, a가 31이라는 값을 가질 경우, true & false가 되니 이때 결과는 참이 나온다. 인용 https://www.youtube.com/watch?v=ndRDxcOnXfw&list=PLHpaQi-LiUCx-vcbcnpU5Tzv2X99WCowN&index=6&ab_channel=%EB%B6%80%EB%B6%80%EA%B0%9C%EB%B0%9C%EB%8B%A8-%EC%A6%90%EA%B2%81%EA%B2%8C%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EB%..
기본형 변수 기본형 변수(primitive type)은 값을 가진다. ex) int - 4byte, short-2byte, long-8byte 기본형 타입은 메모리를 확보하고 그 메모리에 값을 저장한다. 즉, int의 경우에는 메모리의 4byte 공간에 값이 할당된다. 참조형 변수 Book b = new Book();에서 Book 처럼 기본형이 아닌 타입은 모두 참조형(Reference Type)이라고 말한다. 기본형이 아닌 타입은 값을 가지지 않고, 값을 참조하게 된다. 리터럴 int i = 1; 에서 1을 정수 리터럴 1이라고 말한다. 즉, 리터럴이란 변수에 입력되는 값을 말한다. 변수의 초기화 클래스 안에 선언된 변수인 field는 초기화를 하지 않아도 사용이 가능하다. 예를 들어, boolean ..
System.out.println("Hello") 의 동작원리 System.out은 System이 가지고 있는 out이라는 의미이다. out 필드라고 한다. 즉, System 클래스가 가지고 있는 out 필드는 PrintStream 타입이고, 이 PrintStream은 다양한 println, print 메서드를 가지고 있다. https://docs.oracle.com/javase/8/docs/api/java/lang/System.html System (Java Platform SE 8 ) Sets the system property indicated by the specified key. First, if a security manager exists, its SecurityManager.checkPer..
객체 지향으로 가야하는 이유 객체지향 개발 방법은 안정적인 구조에 변경이 빈번하게 발생하는 기능을 종속시키는 지도의 방법과 유사하다. 이것이 객체지향이 과거의 전통적인 방법보다 범용적이고, 재사용성이 높으며, 변경에 안정적인 이유다. 성공적인 소프트웨어들이 지닌 공통적인 특징 훌륭한 기능이 훌륭한 소프트웨어를 만드는 충분조건이라고 한다면, 훌륭한 구조는 훌륭한 소프트웨어를 만들기 위한 필요조건이다. 성공적인 소프트웨어들이 지닌 공통적인 특징은 훌륭한 기능을 제공하는 동시에 사용자가 원하는 새로운 기능을 빠르고, 안정적으로 추가할 수 있다는 것이다. 미래에 대한 대비 미래의 변경을 예측할 수는 없다. 단지 대비할 수 있을 뿐이다. 미래에 대비하는 가장 좋은 방법은 변경을 수용할 수 있는 선택의 여지를 설계..
비즈니스 요구사항 영화관에 입장하는 관객의 초대권을 확인하고, 만약 초대권이 없다면 티켓 구매 후 입장을 시키고, 초대권이 있다면 티켓으로 바꿔준 후 입장 시킨다. 객체 지도 설계 객체와 자료 구조 객체 : private 형식의 변수와 함수가 존재하는 클래스 자료 구조 : public 형식의 변수만 가지고 있고, 함수가 없는 클래스 변수를 private 접근 제한자로 선언하는 이유는 남들이 변수에 의존하지 않게 만들고 싶어서이다. 그런데 웃긴점은 우리는 자연스럽게 getter/setter 함수를 public 하게 선언하여 외부에 노출한다. 과연 이것이 맞는것일까? OOP 스러운 클래스는 추상 인터페이스를 제공해 클래스의 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야하는 것이 진정한 의미의 클래..
의미있는 이름(Meaningful Names) 독자의 입장에서 고려하자. gubun, gbn, sabun, yuji 등 변수명만을 보고 어떤 데이터를 저장하고 있는지 예측이 되는가? 첫 번째 규칙: 의도를 분명히 밝혀라. 코드의 저자의 의도가 명확하게 파악된다. 코드가 위에서 아래로 술술 읽힌다. 코드의 맥락이 명시적이다. 두 번째 규칙: 그릇된 정보를 피하라. 세 번째 규칙: 의미있게 구분하라. 네 번째 규칙: 발음하기 쉬운 이름으로 정하자. 다섯 번째 규칙: 검색하기 쉬운 이름을 사용하자. 로그 검색 용이성 여섯 번째 규칙: 타입과 관련된 문자열을 넣지 말아라. 일곱 번째 규칙: 한 개념에 한 단어를 사용하라. 일관성있는 어휘를 선택해서 이름을 붙이자. ex) Controller-fetch, Serv..
객체지향의 기본 개념은 책임을 수행하는 자율적인 객체들의 협력을 통해 애플리케이션을 구축하는 것이다. 그리고 객체지향 애플리케이션의 중심 사상은 연쇄적으로 메시지를 전송하고, 수신하는 객체들 사이의 협력 관계를 기반으로 사용자에게 유용한 기능을 제공하는 것이다. 클래스는 객체의 속성과 행위를 담는 틀일 뿐이다. 객체지향 패러다임으로의 전환은 시스템을 정적인 클래스들의 집합이 아니라 메시지를 주고받는 동적인 객체들의 집합으로 바라보는 것에서 시작된다. 따라서 객체지향 설계의 중심에는 메시지가 위치한다. 객체가 메시지를 선택하는 것이 아니라 메시지가 객체를 선택하게 해야 한다. 메시지가 객체를 선택하게 하려면 메시지를 중심으로 협력을 설계해야 한다. 결과적으로 메시지가 수신자의 책임을 결정하며, 메시지를 먼..