에제 2 - 1
/*
소스 파일 : Hello.java
*/
public class Hello {
public static int sum(int n, int m)//static 메소드 : 객체의 생성 없이 호출이 가능하다.
{
return (n + m);
}
public static void main(String[] args) {
int i = 20;
int s;
char a;
s = sum(i, 10);
a = '?';
System.out.println(a);
System.out.println("Hello");
System.out.println(s);
}
}
실행 결과 :
?
Hello
30
코드 설명 :
Hello 이름의 클래스 선언
public class Hello{
}
class 키워드로 클래스 선언
public 선언하면 다른 클래스에서 접근 가능하다.
한 줄 주석은 //
여러행 주석은 /* */
main메소드는 public static void 로 선언한다. -> 객체 생성 없이 사용, return값 X
String args[]로 실행 인자를 전달받음
모든 클래스가 main()을 가지지 않음
메소드 : 클래스 바깥에 작성할 수 없음
지역 변수 : 메소드 실행이 끝나면 자동 소실
;로 한 문장의 끝을 인식
화면 출력 : 표준 출력 스트림에 메시지 출력 (System.out)
System.out.println() -> 표준 출력 스트림 System.out의 println() 메소드 호출
println()은 여러 타입의 데이터 출력 가능, 그리고 출력 후 다음 행으로 커서 이동
식별자(identifier)
클래스, 변수, 상수, 메소드 등에 붙이는 이름
식별자의 원칙
일반적으로 특수문자, 공백 또는 탭은 식별자로 사용할 수 없으나 '_' 와 '$'는 사용 가능
유니코드 문자 사용 가능, 한글 사용 가능
자바 언어의 키워드(예약어)는 식별자로 사용 불가능!!
식별자의 첫번째 문자로 숫자는 사용불가능
boolean 값과 널 값(null)은 식별자로 사용불가능
대소문자 구별
Java의 이름 붙이는 관습
기본 : 가독성 높은 이름 사용/ 충분히 긴 이름으로 붙이기
자바 언어의 이름 붙이는 관습 : 헝가리안 표기법
클래스 이름 : 첫번째 문자는 대문자로 시작 -> 대문자로 안 만들면 만들어지지 않는다.
변수, 메소드 이름 : 첫 단어는 소문자로 시작, 이후 각 단어의 첫번째 문자는 대문자로 시작
상수 이름 : 모든 문자를 대문자로 표시
Java의 기본 타입
기본 타입 : 8개
boolean / char / byte / short / int / long / float / double
레퍼런스 타입 :
C/C++의 포인터와 비슷한 개념, 실재 주소를 가지진 않음
배열에 대한 레퍼런스, 클래스에 대한 레퍼런스, 인터페이스에 대한 레퍼런스
기본 타입들은 크기가 정해져 있다.
논리 타입 : boolean 1비트
문자 타입 : char 2바이트(C언어와 가장 큰 차이! 아스키 코드가 아닌 유니코드)
정수 타입 : byte, short, int, long(각각 1, 2, 4, 8바이트)
실수 타입 : float, double(각각 4, 8 바이트)
public class Byte {
public static void main(String[] args) {
System.out.println(Character.BYTES);
System.out.println(Short.BYTES);
System.out.println(Integer.BYTES);
System.out.println(Float.BYTES);
System.out.println(Long.BYTES);
System.out.println(Double.BYTES);
}
}
실행결과 :
2
2
4
4
8
8
자료형 char,int등과 구분하기 위해 클래스는 Character, Integer 로 자료형과 다른 형태이다.
문자열 : String 클래스
문자열은 기본 타입이 아님
String 클래스로 문자열 표현
리터럴
프로그램에서 직접 표현한 값(데이터 그 자체, 값)
정수, 실수, 문자, 논리, 문자열 값이 있음
정수는 int형으로 컴파일
long 타입은 숫자 뒤에 L 또는 l을 붙여 표시
ex. long g = 24L;
실수 타입은 double로 컴파일
문자 : 글자 하나
단일 인용 부호 ('')로 문자 표현 : 글자 하나를 표현
1바이트는 8비트 -> 2자리 16진수
따라서 2바이트는 4자리 16진수이다.
따라서 \u0041 등의 유니코드값을 사용하여 나타낼 수도 있다.
특수문자는 백슬래시로 시작
\b : 백스페이스
\t : 탭
\n : 개행문자
\f : 폼피드 -> 프린트 출력시 현재 페이지를 마침
\r : 캐리지 리턴 -> 행의 처음으로 커서를 이동
\"": 이중 인용부호
\'': 단일 인용부호
\ : 역슬래시(\만으로는 뒤에 n이 오면 개행문자로 인식되는 등의 문제가 생기므로)
논리값과 boolean 타입
논리값은 2개뿐 -> true, false
boolean 타입 변수에 치환하거나 조건문에 이용
기본 타입 이외의 값
null : 클래스의 레퍼런스에 대입 사용
문자열 스트링 : 이중 인용부호로 묶어 표현
ex. "Good", "Morning", "자바"...
문자열은 String 객체로 자동 처리
String str = "Good";
var 키워드를 사용하여 변수 타입 생략 ->
Java 10부터 도입된 키워드, 지역 변수의 선언에만 사용 -> 컴파일러가 변수 타입을 추론
사용 예 :
var price = 200;//price는 int 타입으로 결정
var 키워드를 사용하여 변수 타입을 생략할 시에는 변수 선언문에 반드시 초기값을 지정해야 한다!
상수 선언
final 키워드 사용
(C언어의 #define PI 3.141592)
선언 시 초기값 지정
실행 중 값 변경 불가!!
final double PI = 3.141592;//C언어와 달리 데이터 타입이 필요하다.
예제
public class CircleArea {
public static void main(String[] args) {
final double PI = 3.141592;
double radius = 10.0;
double circleArea = radius * radius * PI;
System.out.println("원의 면적 = " + circleArea);
}
}
자동 타입 변환
작은 타입은 큰 타입으로 자동 변환 -> 컴파일러에 의해 이루어짐.
치환문이나 수식 내에서 타입이 일치하지 않을 때
long m = 25;//25는 int 타입, 25가 long 타입으로 자동 변환
double d = 3.14 * 10;//실수 연산을 하기 위해 10이 10.0으로 자동 변환
//다른 피연산자 3.14가 실수이기 때문!! -> 이는 숫자들 중 하나만 실수라도 자동으로 실수 연산이 됨을 의미한다.
강제 타입 변환
ex.
double d = 1.9;
int n = (int)d; //n = 1
강제 타입 변환으로 소숫점 이하 0.9는 손실된다.