1. Java란 무엇인가
- 인터넷 탄생 이후, PC 중심 → 네트워크 중심으로 세상이 변했다.
- 이 변화에 대응하기 위해 Java가 등장했다.
- Java = 인터넷 세대 프로그래밍 언어.
2. Java의 기원
- 1991년, Sun Microsystems의 James Gosling 등이 개발.
- 처음 이름은 "Oak" → 1995년에 "Java"로 개명.
- 초기 목적: 다양한 전자기기(가전제품)용 플랫폼 독립적 소프트웨어 개발.
3. C, C++, C#과의 관계
- Java는 C 문법 계승, C++의 객체지향 모델 차용.
- 그러나 Java는 C++의 단순 인터넷 버전이 아니다.
- **C#**도 Java를 참고해서 만들어졌지만, Java를 대체하지 못한다.
- 결론: C, C++, C#, Java는 공존할 것.
4. Java의 인터넷 기여
- Applets: 인터넷 통해 전송, 브라우저에서 자동 실행되는 작은 Java 프로그램.
- Security: Java는 앱릿을 격리 실행하여 시스템 보호.
- Portability: 다양한 운영체제에서도 동일 코드로 실행 가능.
5. Java의 비밀병기: Bytecode
- Java 소스는 컴파일하면 머신 코드(X) → **Bytecode(O)**로 변환된다.
- **JVM(Java Virtual Machine)**이 이 Bytecode를 실행한다.
- 덕분에 한 번 작성하면, 어디서나 실행된다. (Write Once, Run Anywhere)
- 보안도 JVM이 제어하니 더 강력하다.
C언어는 CPU마다 다른 기계어로 번역해야 함
ㅡ> CPU따라 코드 자체를 변경해야 할 수도 있음 (ex. 빅엔디언, 리틀엔디언)
Java의 ByteCode는 JVM이 해석해서, CPU와 OS에 무관하게 실행가능
ㅡ> JVM이 코드 검사해서 보안도 좋아
6. Java를 관통하는 8개 철칙 (Java Buzzwords)
- Simple: 간결하고 사용하기 쉬움
- Secure: 안전성 보장
- Portable: 이식성 확보
- Object-Oriented: 객체지향 중심
- Robust: 오류 방지에 강함
- Multithreaded: 멀티쓰레드 지원
- Architecture-Neutral: 특정 하드웨어에 종속되지 않음
- High Performance: 최적화된 Bytecode로 빠른 실행
7. 객체지향 프로그래밍 3대 원칙
- 캡슐화 (Encapsulation): 데이터 + 메서드를 하나로 묶는다.
- 상속 (Inheritance): 기존 클래스를 확장해 새로운 클래스 생성.
- 다형성 (Polymorphism): 하나의 인터페이스로 다양한 형태 구현 가능.
8. 첫 번째 Java 프로그램
- class 선언 → main() 메소드 → 출력 (System.out.println()).
- 라인별 해석 및 컴파일 방법 설명.
/*
This is a simple Java program.
Call this file Example.java.
*/
class Example {
// A Java program begins with a call to main().
public static void main(String args[]) {
System.out.println("Java drives the Web.");
}
}
1. 주석
- /* */로 감싸진 부분은 컴파일러가 무시한다.
2. 클래스 선언
- class 키워드 = "새로운 틀"을 정의한다는 뜻
- Java는 모든 코드가 클래스 안에 들어가야 한다.
- Example = 클래스 이름 → 파일명도 반드시 Example.java 여야 한다.
3. 메인 메소드
- public: 이 메소드는 어디서든 호출 가능해야 한다.
- static: 객체를 생성하지 않고 클래스 레벨에서 직접 호출할 수 있어야 한다. (JVM이 직접 호출)
- void: 이 메소드는 아무 값도 반환하지 않는다.
- main: JVM은 프로그램 시작 시 무조건 main()을 찾는다.
- String args[]: 프로그램 실행할 때 명령줄 인수를 받을 수 있게 한다.
⚡ 여기서 핵심은:
"JVM은 무조건 public static void main(String[] args)부터 실행한다."
static 메소드
ㅡ> jvm이 직접 호출
다른 메소드
ㅡ> 참조를 통해서 호출
4. 출력
- System = Java의 표준 라이브러리에서 제공하는 입출력 시스템.
- out = System 안에 있는 출력 스트림 객체.
- println = 문자열을 출력하고 줄바꿈까지 한다.
즉,
"Java drives the Web." 이 문장을 콘솔에 찍는다.
5. 중괄호 { }
- { 시작 → 블록 열기
- } 끝 → 블록 닫기
- 클래스, 메소드, 제어문 등 모든 범위는 중괄호로 감싼다.
🔥 컴파일/실행 흐름
9. Syntax Errors 다루기
- 코드를 입력할 때 오류는 필연이다.
- Java 컴파일러는 입력된 소스 코드를 해석하려고 하지만, 잘못 입력되면 "구문 오류(Syntax Error)" 메시지를 뿜어낸다.
- 주의할 점: 컴파일러가 출력하는 오류 메시지가 실제 문제를 정확히 지적하지 않을 수도 있다.
- 예를 들어, {(중괄호)를 빼먹었는데 ';' expected 같은 이상한 오류 메시지가 뜰 수 있다.
- 진짜 오류를 찾으려면:
- 오류가 표시된 줄뿐 아니라 그 직전 몇 줄도 함께 검토해야 한다.
- "오류는 때때로 몇 줄 뒤에야 감지된다." 이 원칙을 항상 기억하라.
⚡ 교훈
컴파일 오류 메시지를 무조건 맹신하지 마라.
네가 직접 사고하고, 역추적하고, 문제의 본질을 찾아내야 한다.
10. 두 번째 간단한 프로그램
/*
This demonstrates a variable.
Call this file Example2.java.
*/
class Example2 {
public static void main(String args[]) {
int var1; // 변수를 선언
int var2; // 또 다른 변수 선언
var1 = 1024; // var1에 1024를 대입
System.out.println("var1 contains " + var1);
var2 = var1 / 2;
System.out.print("var2 contains var1 / 2: ");
System.out.println(var2);
}
}
- 변수(Variable): 메모리 공간에 이름을 붙인 것.
- 선언(Declaration): int var1; 처럼 변수의 이름과 타입을 명시하는 것.
- 대입(Assignment): var1 = 1024; 처럼 값을 변수에 저장하는 것.
- 출력(Output): System.out.println()으로 변수 내용을 콘솔에 보여줌.
⚡ 실행 결과
var1 contains 1024
var2 contains var1 / 2: 512
11. 변수와 제어문
- 변수 선언: Java는 변수를 사용하기 전에 반드시 선언해야 한다. (타입 지정 필수)
- 데이터 타입: 여기서는 int 사용 — 정수형 데이터 타입.
- 대입 연산자 =: 오른쪽 값을 왼쪽 변수에 복사.
- 제어문(Control Statements): 프로그램 흐름을 제어하는 문장들.
- if 문: 조건을 평가해서 다른 경로로 흐름 분기.
- for 루프: 반복 실행을 가능하게 하는 구조.
- 블록(Block) 사용: 여러 문장을 {}로 묶어 하나의 논리 단위로 처리한다.
'언어 > Java' 카테고리의 다른 글
3: Program Control Statements (0) | 2025.04.28 |
---|---|
2장: 데이터 타입과 연산자 (1) | 2025.04.28 |
Java 변수 종류 (0) | 2025.04.27 |
Java 스트림 API (0) | 2025.03.17 |
Java 컬렉션 (0) | 2025.03.17 |