예전에 안드로이드 개발한다는 스터디에 반강제로 끌려들어가서 자바 공부하게되었을때 정리해두고 보지도 않았던건데 이번에 진짜로 공부하게 생겨서 정리해서 올려봄
자바와 c 의 차이점
0. 기본
전처리기(#define, #include) 없음.
따로 include하지 않아도 알아서 클래스를 찾아준다.
1. 타입
기본형 vs 참조형 차이!
기본-정수형: byte(8 bit), short(16 bit), int(32 bit), long(64 bit). unsigned 없음
기본-실수형, float, double
기본-불린형: boolean
기본-문자형: char(16 bit, 유니코드)
참조-배열형: type[] a = new type[size]; 배열 범위 벗어나면 예외 발생
참조-클래스: 구조체, 공용체 따위는 없다!!
2. 제어문
if문: 동일
for문: 동일하지만, for(int i = 0; i < 5; i ); 에서 i는 내부 스코프로 처리되지 않음
for문2: for(type a : array); c 11의 for문과 동일
break문: break label; 과 같이 레이블과 같이 사용하여 이중 루프 탈출 가능
continue문: 같음
switch문: 같음
3. 연산자
사칙 연산자: 동일, %가 실수에 대해서도 동작. (fmod함수와 일치)
대입 연산자: 동일, >>>= 추가
증감 연산자: 동일
비교 연산자: 동일
비트 연산자: 동일, >>> 연산자 추가 (shr, 비트를 오른쪽으로 밀고 상위비트를 0으로 채움)
캐스트 연산자: 동일
4. 클래스
선언: 마지막에 세미콜론 없음! 함수 선언과 구현이 모두 class 안에 들어가야함!
필드: 멤버 변수와 유사. 클래스 내부에서 선언과 함께 초기화 가능
상수 필드: final 지정자를 사용. 상수로 처리됨. 초기화 이후에는 변경 불가능
액세스 지정자: protected, 디폴트 주의할것
| 클래스내부 | 패키지내부 | 서브클래스 | 패키지외부 |
public | O | O | O | O |
protected | O | O | O | 서브클래스만 |
디폴트 | O | O | X | X |
private | O | X | X | X |
메서드: 멤버 함수와 유사. 클래스 외부에 함수, 변수 선언 불가!
이름 없는 { } : 초기화 블록, 복잡한 초기화 코드를 작성 가능.
생성자: 동일
finalize 함수: 파괴자 없음!! 가비지 컬렉터에 의해 클래스가 해제될 때 호출됨.
정적 멤버: static 멤버 변수, static 멤버 함수와 유사.
5. 열거형
기본적으로 c와 같으나... 실제로는 클래스!
6. 상속
c 의 상속과 유사
class Subclass extends Superclass { //... } |
서브클래스의 생성자에서 슈퍼클래스의 생성자 호출: super(parameters...) 호출.
자기 자신의 다른 생성자 호출: this(parameters...) 호출.
동적 바인딩: c 과 달리 모든 함수가 virtual 함수
타입확인 연산자: a instanceof Type (a가 Type의 인스턴스면 True반환)
final 클래스: 더 이상 상속 못함
final 메소드: 상속해도 재정의 못함
다중 상속 없음!
7. 추상 클래스 / 인터페이스
추상 메소드: c 의 순수 가상 함수와 동일
추상 클래스: 인스턴스를 가질 수 없는 클래스, 상속하여서 사용해야 함.
인터페이스: 추상 메서드와 상수 필드만 가지는 클래스, 인터페이스 다중 상속은 가능!
interface Animal { void Eat(); void Sleep(); }
class Cow implements Animal { public void Eat() { System.out.println("우걱우걱"); } public void Sleep() { System.out.println("쿨쿨"); } }
class JavaExam { public static void main(String args[]) { Cow So = new Cow(); So.Eat(); So.Sleep(); } } |
8. 클래스 중첩
정적 이너 클래스: 클래스 내부에 static으로 선언된 클래스. c 의 이너 클래스와 같음.
이너 클래스: 클래스 내부에 static없이 선언된 클래스. 상위 클래스의 인스턴스와 연결됨
class Car { CarName Name; String Color; //이너 클래스 선언 class CarName { String Model; int Year; CarName(String aModel, int aYear) { Model = aModel; Year = aYear; } void OutColor() { //상위 클래스의 필드 참조 System.out.println("색상은 " Color "입니다."); } }
Car(String aModel, int aYear,String aColor) { Name = new CarName(aModel,aYear); Color = aColor; } }
public class JavaExam { public static void main(String[] args) { Car Pride = new Car("프라이드", 2005, "파랑"); Pride.Name.OutColor();
//Pride 인스턴스와 연결되는 이너 클래스 생성 Car.CarName Pride2 = Pride.new CarName("프랑이", 2009); Pride2.OutColor(); } } |
로컬 이너 클래스: 메소드 내부에 선언된 클래스. 외부 클래스의 멤버 참조 가능.
익명 클래스: 클래스 선언 없이 인스턴스를 만드는 위치에서 클래스를 정의.
interface ICar { void Run(); }
public class JavaExam { public static void main(String[] args) { //익명 클래스 ICar Porter = new ICar() { public void Run() { System.out.println("우당탕 쿵탕"); } }; Porter.Run(); } } |
인터페이스 역시 중첩 선언 가능함.
9. 패키지
c 의 네임스페이스와 유사. 이름 충돌을 방지하는데 사용
소스 파일의 첫줄에 package name; 선언하여 패키지 이름을 지정함.
import name;을 이용하여 패키지명을 밝히지 않고도 패키지 내부를 참조 가능 (c 의 using namespace와 유사.)
빈도분석 프로그램 Counter Win (윈도우버전) (0) | 2013.11.17 |
---|---|
빈도분석 프로그램 Counter (3) | 2013.10.15 |
[c/c ] [WinAPI] 컴퓨터 각종 부품 정보 알아내기 (0) | 2013.10.08 |
[파이썬] 로마숫자를 10진수 정수로 변환하기 (0) | 2012.10.23 |
[파이썬] 정수를 로마숫자로 변환하기 (0) | 2012.10.23 |
단순 암기 도우미 BlinkMemory (Oxford Latin Course 포함) (3) | 2011.12.03 |
댓글 영역