생활코딩 -Java-

현재 객체 지향 프로그래밍 전까지 한 상태이다.

숫자와 문자
변수
주석과 세미콜론
데이터 타입
상수의 데이터 타입
형변환
연산자
비교와 boolean
조건문
논리 연산자
반복문
배열
메소드
까지 강의를 본 상태에서 C언어와 달라 외워야 했던 부분들을 정리하고자 한다.

출력
우선 printf()문과 달리 자바는 system.out.println(); 이라 쓴다.
system.out.println("문자열을 넣을 수 있다.");

데이터 타입은 c언어와 유사하다.

주석은 c언어와 사용법이 같다.

데이터 타입메모리의 크기표현 가능 범위
byte1 byte-128 ~ 127
short2 byte-32,768 ~ 32,767
int4 byte-2,147,483,648~2,147,483,647
long8 byte-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

float4byte±(1.40129846432481707e-45 ~ 3.40282346638528860e+38)
double8byte
±(4.94065645841246544e-324d ~ 1.79769313486231570e+308d)

char2byte모든 유니코드 문자

char도 있지만 string 클래스를 더 많이 쓰는 듯하다. 하지만 클래스를 모르므로 나중에 클래스 공부할 때 찾아보기로 하자.


형변환에 대해 c언어에서도 자세히 모르지만, 자동형변환의 원칙은 표현범위가 좁은 데이터 타입에서 넓은 데이터 타입으로 변환만 허용한다는 것이다. 즉, int형은 long형이 될 수 있지만 long형은 int형이 될 수 없다.
자바에서는 int b= (int)100.0F 처럼 사용한다. 또한 float a= 10.0F 처럼 사용한다.

비교는 비슷하지만 자바에는 .equals 메소드가 있다.
public static void main(String[] args) {
String a = "Hello world";
String b = new String("Hello world");
System.out.println(a == b);
System.out.println(a.equals(b));
}
위처럼 사용가능하다. 하지만 string 과 new는 역시 모르겠다. 하지만 강의를 보니
문자와 문자를 비교할 때 .equals 메소드를 쓴다고 한다. 그래서 결과는 false 와 true 다.

조건문은 c언어와 똑같다.
논리연산자 역시 똑같다.
반복문도 같다.

배열에서 string[] Group = {"kim","choi"}; 로 초기화를 하는 것 보니 c언어와 좀 다르다.
배열 인덱스도 c언어와 같다. (Group[0]부터 시작)
여기서 자바 5.0부터 도입된 신기한 for문이 나온다.
for (String e : Groups){
           system.out.println(e + "이 존재한다.");
}
for문이 좀 더 섹시해진 것 같다. 위의 구문은 배열 Groups의 값을 변수 e에 담아서 중괄호 구간 안으로 전달해준다. 반복문의 종료조건을 위해서 기준값을 증가시키는 등의 반복적인 작업을 내부적으로 감춘 것이라고 할 수 있다. 
파이썬의 for i in a랑 비슷한건가..

메소드는 c언어의 함수와 비슷한 개념인 것 같다.
public static void numbering() {
int i = 0;
while (i < 10) {
System.out.println(i);
i++;
}
}
위의 구문을 사용하면 main에서 numbering()을 메소드로서 사용할 수 있다.
c언어와 같이 리턴값이 있으면 리턴값의 자료형에 맞춰 위 구문의 void를 바꾸면 된다.

public static void main(String[] args){
for(String e : args){
System.out.println(e);
}
}
위의 String[] args는 나도 얼마 전에 CS50을 들으면서 알았다.
학교 수업에서 안가르쳐주신 건지 못들은건지 모르겠지만 어려운 소스코드에 항상 있던 
저 코드를 이제 깨달았다.
메소드 main의 인자 String[] args를 통해서 사용자가 입력한 값을 전달하고 있다는 것인데
비쥬얼 스튜디오는 되는지 모르겠고 이클립스에서 하는 법은 좀 복잡한 것 같다.
하지만 리눅스 환경에서는 ./오브젝트명 인자값 만 쓰면 가능하다.

입력
자바의 라이브러리 중 scanner를 이용하면 사용자의 입력을 잡을 수 있다. 
c언어의 gets()나 scanf()가 자바에서는 좀 복잡한 것 같다.

import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
System.out.println(i*1000);
sc.close();
}
}
강의에서 sc.nextint()가 실행되면 자바는 사용자의 입력이 있을때까지 변수 i에 값을 할당하지 않고 대기상태에 있다가 키보드로 데이터를 입력하고 엔터를 누르면 비로소 i에 값이 담기고 i*1000을 통해서 입력값에 1000이 곱해지고 그 결과가 화면에 출력된단다.
아직 배운것으로 설명하기 힘든 부분이 많아 나중에 더 세세하게 한다니 다행이다. 

파일 불러오기
File file = new File ("out.txt");처럼 파일 가져오는 것은 c언어와 유사하다.


시즌1이 끝났다. 파이썬은 객체와 절차를 왔다갔다 하지만 자바는 객체를 강제하기 때문에 더 어렵고 인내가 필요하다고 한다. 모르겠고 자료구조, 알고리즘, 영어 할 게 많다.


Reference

https://opentutorials.org/course/1223/4551 (생활코딩)

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리