본문 바로가기

자바

2-1 자바 기본 프로그래밍 (공부 메모)

C언어를 배웠기 때문에 많은 내용이 생략되어 있음. 하나의 언어를 배우면 다른 언어 이해가 수월해진다는게 이 얘기 였나봅니다.

 

첫 언어로 java공부를 하시는 분이면 <명품 JAVA programming>을 참고 하시면 됩니다. (이 책보면서 내용 정리하는 중이므로 제 정리 내용과 함께 보든

 

지, 그냥 책만 보시든지)

 

 

 

책을 구매하시는게 부담스러울 수 있습니다. 저 역시 옛날엔 책 값에 뜨억해서 책 구매보단 어둠의 경로를 통해 얻으려 했지만,

 

요새는 새 책을 사는 편입니다.(집안 사정이 어렵다면 도서관이나 중고책등을 활용하시거나 인터넷을 이용해 자료를 구해보세요 ㅠ)

 

책을 만드는 사람이 최소 몇 년이상 쌓은 관련 분야 지식과 집필 노력,

 

책을 읽고 난 뒤에 얻어서 내 머릿 속에 남은 지식의 활용 가치,

 

등을 생각해보면 비싸다기 보다는 싸다는 생각까지 들더군요.(사실 자신의 생각을 공유하기 위해 집필해주신 것 자체에 감사하다는 ㅠ)

 

 

서론이 길었네요. 공부 메모 시작합니다.

 

package hello2;

public class Hello2 {
	public static int sum(int n , int m) {
		return n+m;
	}
	
	public static void main(String[] arg) {
		int i = 20;
		int s;
		char a;
		
		s = sum(i,10);
		a = '?';
		System.out.println(a);
		System.out.println("Hello2");
		System.out.println(s);
	}
}

 

메소드 ㅡ C언어에서 함수에 해당.(처음 프로그래밍은 커녕 아무것도 모른 상태로 c언어 배울 때, 메소드, 함수 막 섞어서 설명해서 혼란스러웠음. 일반적으로 C언어에선 함수라고 하는게 맞음. 그러나 섞어서 쓰는 사람들도 있음.)

 

ex) main 메소드, sum 메소드

 

 

지역(local) 변수 - 메소드 내에 선언된 변수          //전역 변수에 대한 얘기는 없지만 public class 상에 선언된 변수가 아닐까. C와 달리 변수들이 전부 Class나 메소드 안에 포함되어야 한다고 했으니까)

 

 

     블록 ㅡ ' { '으로 시작해서 ' } '으로 끝남

 

 

System.out.printIn("Hello2");        <----- " "안에 내용이나 타입 데이터 출력 후 다음 줄으로 이동함  

 

 

 

 

 

 

* 식별자 규칙

 

 

cf. 식별자(identifier) - 클래스, 변수, 상수, 메소드 등에 붙이는 이름              ex) 위 예에서 Hello2, sum, main, i , s, a,

 

-특수문자 중 '_'(under-hypen)  ,  '$'  사용가능 , 공백 불가

 

-식별자로 한글 사용가능

 

-자바 키워드 x, 식별자 첫문자 숫자 x. 특수문자는 첫 번째 문자로 사용가능하나, 쓰지 않는게 일반적

 

-대소문자 구별

 

-길이 제한 x

 

 

cf. 자바 키워드 ㅡ "예약어" 라고도 함

 

 

*이름 붙이는 관습(이런거 협업할 때는 배려지)

 

클래스 이름 ㅡ 첫 문자를 대문자하고 단어 첫문자들을 대문자로.  ex) HelloWorld

 

변수,메소드 이름 ㅡ 첫 문자 소문자하고 단어 첫문자들은 대문자로

 

상수 이름 ㅡ 모든 문자를 대문자로

 

 

*데이터 타입(기본타입 8개 + 레퍼런스 타입 1개(3종류로 갈림))

 

-기본 : 

 타입

논리 타입

문자 타입 

정수 타입 

실수 타입 

 표기

boolean

char

byte

short

int

long

float

double

타입 크기(byte)

1

2

1

2

4

8

4

8

표현 범위

true , false

Unicode

-128~127

-32,786~32,767

-2^31~2^31-1

-2^63~2^63-1

-3.4E38~3.4E38

-1.7E308~1.7E308

실수의 표현 범위는 수의 과학적 표기법에 따른 것임

 

cf. 플랫폼 독립적이라서 운영체제나 cpu처리능력에 상관없이 데이터 타입의 크기가 일정함.  

 

    

-레퍼런스 (배열 | 클래스 | 인터페이스 중 하나에 대한 레퍼런스) : C언어의 포인터와 유사한 개념

 

클래스에 대한 레퍼런스 ㅡ> 객체에 대한 주소 값 정도로 하고 넘어가기 . 추후 자세히 다룸

 

 

 

 

 

 

*리터럴(literal) ㅡ 직접적으로 표현 되는 상수 값을 말함.           ex) 5,  21,  '!' , 'a' , 42.195 등등

 

#정수 타입 리터럴

 

-표현방식

 

15, 015, 0x15 는 각각 다른 값

 

15는 10진수의 15

015는 8진수 표기로, 10진수 값으론 13

0x15는 16진수 표기로, 10진수 값으론 21

 

-자바에서 모든 정수타입 리터럴은 int타입으로 인식됨. 리터럴을 long타입으로 인식되게 하려면 대/소문자 L 을 숫자 뒤에 붙이면 됨

 

ex) 45L, 123l

 

#실수 타입 리터럴

 

-표현방식

같은 줄에 있는 것은 같은 표현이다

 

12.        12.0

.1234    0.1234    1234E-4

 

-자바에서 모든 실수타입 리터럴은 double로 인식됨. float로 인식되려면 f, F 를 수 뒤에 붙이면 됨.

명시를 위해 d,D로 double임을 나타내기도 한다.

 

 

 

#문자 타입 리터럴

 

-표현 방식

 

1. ' ' (인용부호)안에 문자 하나로 표기

 

2. 유니코드식 표기     \u 뒤에 4자리 16진수.

 

\u0041  ㅡㅡ> 'A'

\uae00 ㅡㅡ>'글'

 

 

 

#특수문자 리터럴 , 이스케이프 시퀀스(escape sequence)

 

 

http://twinstarbox.tistory.com/entry/Java-Escape-Sequence-%EB%AC%B8%EC%9E%90

 

 

#논리 타입 리터럴

 

ture와 false

 

cf. boolean 타입이 변수가 갖는 값 : 참,거짓 뿐

 

# 그 외

 

null 리터럴 

어떠한 레퍼런스 타입에서든 값으로 사용가능

기본 타입을 제외한 어떠한 타입의 변수에도 대입 가능.

int n = null;  // 오류. 기본타입에는 null 값 지정 불가

String str = null; // 정상        문자열은 기본 타입이 아니고 String 객체가 저장하는 값임.

 

   문자열 리터럴 

         ex) "Good" , "자바", "a"      // a문자 하나지만 " "안에 있으면 문자열

 

 

 

*상수

 

 

상수는 변수처럼 생겼지만, 변수와 달리 프로그램 실행 중에 값이 바뀌지 않는 값이다.

 

final 데이터타입 상수이름 = 초기값 ; 의 형태로 쓰인다.

 

ex)        final int PRICE = 10;

 

 

 

*타입 변환

 

 

1. 자동 타입 변환 (implicit)

 

 

데이터가 그대로 보존 되는 자동 타입 변환

 

byte >> short/char >> int >> long >> float >> double

 

ex) 

 long a ; 

 byte b;

 a = b ; <ㅡㅡㅡㅡ 자동 타입 변환/암시적 변환

 

 

2. 강제 타입 변환 (explicit)

 

위에 제시된 순서의 역방향으로 데이터를 담는 경우(ex)long값을 int에 넣는 것) 데이터가 손실될 가능성이 있으므로 java가 허용하지 않음.

넣고 싶다면 명시적으로 변환함을 표현해줘야 함

 

ex)

short var;

int n = 855638017;

var = (short) n ;       <ㅡㅡㅡㅡ강제 타입 변환, ( ) 안에 변형하려는 타입을 적는다.

 

package type_change;

public class Example_typechange {
	public static void main(String[] args) {
		byte b = 127;
		int i = 100;
		
		//자동 타입 변환 (암시적 변환)
		
		System.out.println(b+i);  
		System.out.println(10/4);
		System.out.println(10.0/4);
		//값중에 더 큰 그릇을 가진쪽으로 변형됨  byte보다 int가 크니까 int로 변환
		//두 수가 모두 int라서 결과도 그냥 int로 변환 . 참고로 정수 타입 리터럴은 자연스럽게 int타입으로 처리됨
		//10.0은 실수타입 리터럴로 double타입으로 처리되고, 4는 int로 처리됨 . 그래서 더 큰 double값으로 자동 타입변환
		
		//강제 타입 변환 (명시적 변환)
		
		System.out.println((char)0x12340041);
		//16진수를 유니코드로         \u0041 이 'A'에 해당된다는 건 아는데 0x1234는 왜 붙지?
		
		System.out.println((byte)b+i);
		//예제에는 -39가 출력 되는 것으로 나오는데, 227 그대로 출력됨..
		
		System.out.println((int)2.9+1.8);    
		System.out.println((int)(2.9+1.8));
		System.out.println((int)2.9+(int)1.8);
		//이 세개의 println으로 추측하면,
		//괄호가 없으면 연산보다는 형변환이 우선하고,
		//형변환은 괄호로 묶이지 않으면 가까운 하나의 상수를 바꾼다. 
	}
}

 

출력 결과

 

227
2
2.5
A
227-------------> 원래 byte가 -128~127 범위라 -29가 출력되야 하는데, 내부적으로 byte를 unsigned byte로 바꾸는 무언가가 있나
3.8
4
3

 


 

 

 

 

 

'자바' 카테고리의 다른 글

3-3. main() 과 예외처리  (0) 2018.06.03
3-2. 배열  (0) 2018.06.03
3-1. 반복문  (0) 2018.06.02
2-2. 자바 기본 프로그래밍 (공부메모)  (0) 2018.05.31
1. 자바 시작 (공부 메모)  (0) 2018.05.27