1. Java의 특징들

  • OS에 독립적이다
  • 객체지향 프로그래밍 언어이다 (OOP)
  • 포인터 메모리를 자동 관리해준다
  • 동적로딩이 가능하다
  • 멀티 쓰레드를 지원한다

2. 변수란?

  • 메모리에 값을 기록하기 위한 공간이다
  • 기록 후 지속적 사용이 가능하다

3. 데이터의 저장 단위

  • 컴퓨터는 기본적으로 2진수를 사용하고 이것이 1bit
  • 사용단위로 1byte = 8bit 가 된다

4. 변수를 선언한다?

  • 메모리 공간에 데이터를 저장할 수 있는 공간을 할당한다는 것과 동일하다

5. Java의 기본 자료형 8가지

  1.  정수형 : byte short int long ( 1  ,  2  ,  4  ,  8  byte)
  2.  실수형 : float  long ( 4 ,  8  byte)
  3.  문자형 : char (2 byte)
  4.  boolean (1 byte)
  5. (String은 기본형이 아닌 참조형이다)

6. 변수 선언시 고려할 것

  1. 변수 명은 대소문자를 구분한다
  2. 예약어는 불가하다
  3. 숫자로 시작할 수 없다
  4. 특수문자는 _ , $ 만 허용되고 되도록 안쓰는게 좋다
  5. 관례적 표기법에 따라 쓰고 카멜표기를 따르면 첫문자는 소문자, 다음 단어 첫문자마다 대문자를 쓴다.

7. 상수와 리터럴은 비슷한 개념이지만 리터럴은 대입되는 값 그 자체를 의미한다.

8. 기본형 변수의 형변환이 가능하다

  1. 자동 형변환 : 작은 자료형 -> 큰 자료형은 컴파일러가 자동으로 바꿔준다.
  2. 강제 형변환 : 큰 자료형 -> 작은 자료형은 강제로 (자료형) 를 붙혀 바꾸며 이떄 값 손실이 생길 수 있다.

ex) double a = 5+ 5.9 ; -> 5는 컴파일러에 의해 자동으로 큰 자료형 실수로 바뀌게 된다

ex) int a = 5 + 5.9; -> 작은 자료형으로 바뀌어야 하므로 강제 형변환으로 소수 자리의 손실이 필요하다.

 

9. 오버플로우란?

  • 표현 가능 범위를 초과하게 될때 최대 표현-> 최소 표현 값으로 나오게 되는것

10. 메모리의 구조

  • Static -> 객체마다 공용으로 써질 것들을 만들어 놓으면 시작 시 Static 메모리에 올라가서 공용으로 사용된다
  • Heap -> new 연산자에 의해 동적으로 할당되고 저장되며 객체 배열 등 사용자 정의로 사용될 수 있다.
  • Stack -> 메서드를 호출하면 자동으로 생성되고 끝나면 자동 소멸된다

*Heap 영역은 객체, 배열 등 사용가자 크기를 정해 만들수 있어 동적 영역이고 가비지 컬렉터 등의 관리 영역도 된다

*Stack은 지역변수, 매개변수, 메소드호출 등 으로 사용된다.

 

11. 배열이란?

  • 같은 자료형의 변수를 하나의 묶음으로 다루는 것.
  • 선언하면 Stack에 주소를 저장하게 되고 new 연산자로 Heap 영역에 올리면 참조해 묶음을 만들어 낸다

12. 배열 복사

  • 복사의 방법으로 2가지가 있다
  • 1.  얕은 복사 : 객체의 주소값만 참조형 변수에 저장함
    • 단순 주소 복사이므로 그냥 변수가 가진 주소값만 대입해 주면 끝난다.
    • 하지만 하나의 배열을 두개의 변수가 참조하는 것이므로 서로가 영향을 준다는 문제가 있다.
  • 2.  깊은 복사 : 새로운 배열 객체 생성 후 기본 배열 데이터를 복사한다.
    • arrays클래스 등의 방법으로 깊은 복사를 지원한다
    • System.arraycopy(arr1 , 0 , arr2 , 0 , arr1.length)
    • arr2 = Arrays.copyOf(arr1, arr1.length)
    • clone() 

13. 2차원 배열

  • 자료형이 같은 1차원 배열을 또 다시 배열로 묶은 것
  • new int[3][] 등으로 표현한 것 처럼 뒷자리를 가변 배열로 서로 다르게 참조할 수 있다.

14. static 과 final

  1. static : 같은 타입의 여러 객체가 공유할 필드에 사용한다 => 정적 메모리 영역에 자동 할당됨
  2. final : 하나의 값만 계속 사용할 시 사용하며 상수는 모두 대문자로 표기한다.

15. final + a 의 효과

  1.  final + 멤버변수 : 상수
  2.  final + 필드 : 상수
  3.  final + 메서드 : 오버로딩이 불가능해 진다
  4.  final + 클래스 : 상속이 불가능해진다 (마지막 클래스)

16. 객체 지향의 특징

  1. 상속 + 추상화
  2. 캡슐화
  3. 다형성

17. 객체란 무엇인가?

  • 자신의 속성과 기능( 값 + 함수) 이 다른것과 구분되어 식별 가능한 것 ( 이 틀을 클래스라 할 수 있다)
  • -> 이것들이 new 연산자로 메모리에 생성된 결과물이 객체라 볼 수 있다.
  • 즉 클래스의 정의대로 메모리에 할당된 결과물이다.

18. 클래스?

  • 객체의 특성에 대해 정의한것( = 설계도의 개념)
  • 추상화와 캡슐화가 필요하다

19. 추상화?

  • 클래스의 속성과 기능중에서 필요한 공통점들을 추출하고 불필요한 부분을 제거하는 것
  • '인간' 이라는 추상화로 공통점으로 뽑아내고 각각의 개성을 가진 1명은 객체가 된다는 것과 비슷

20. 캡슐화

  •  추상화로 정리된 데이터들과 기능을 하나로 묶어서 관리한다.
  •  데이터에 직접 접근을 제한하는 것을 원칙으로 간접 접근 메서드를 내부에 작성해 데이터에 접근한다.
  •  이것으로 정보 은닉 효과를 만들어 낼 수 있다.
  •  멤버 변수(인스턴스 변수)를 private 제한을 하고
  •  이에 대한 접근 메서드는 public 으로 하여 간접 접근을 허용한다.

21. class 접근제한자

  • 기본 default : 같은 패키지 내에서만 가능
  • public : 전부 사용 가능

22. 필드 접근 제한자

  • public : 전부 
  • protected : 같은 패키지 + 후손 패키지 까지 접근 가능
  • default : 같은 패키지
  • private : 클래스 내에서만 가능

23. 생성자란?

  • 객체가 new 연산자로 Heap 메모리 영역에 할당될 때 
  • 객체 안에서 만들어지는 필드 초기화 + 생성 시 필요한 기능 수행
  • 생성자명은 클래스명과 반드시 같아야한다.
  • 작성하지 않으면 컴파일러가 자동으로 기본생성자를 만들어내고
  • 매개변수가 있는 생성자를 만들면 기본생성자를 만들지 않으므로 별도로 기본 생성자를 만들어야 한다.

24. 오버로딩이란?

  • 한 클래스 내에 동일한 이름의 메서드를 여러 개 작성해서 다른 기능을 구현하는 기법이다.
  • 1. 메서드별로 이름은 같아야하고
  • 2. 매개변수는 달라야 한다.
  • * 다르단 것은 [매개변수 갯수] , [매개변수 타입], [갯수와 타입은 같지만 순서가 다름] 을 의미
  • * 오버라이딩과 구분해야 된다

25. this 와 this()

  • this 란 모든 인스턴스의 메서드에 숨겨진채 존재하는 레퍼런스로
  •  할당된 객체 자신을 가르킴( 객체 자신의 주소)
  • 생성자 매개변수 이름 = 필드명 과 같이 생성자 선언시 객체 필드를 매개면수와 구별시 많이 사용
  • this() 란 같은 클래스의 서로 다른 생성자를 호출할 때 사용하며
  • 생성자 () { this() } 처럼 다른 생성자를 호출 시 반드시 첫 출에 사용해야 한다.

26. 상속이란?

  • 다른 클래스가 가지고 있는 멤버들을 새 클래스에서 작성하지 않고도 상속받아
  • 자신의 멤버처럼 사용 가능해 지는것을 말함
  • * 재사용 , 공동 규약의 정의를 할수 있게 된다.
  • 이를 통해 중복을 제거하고 공통 관리로 추가 변경이 용이해지고 코드 양도 결론적으로 줄어들게 되는 장점이 있다
    • <주의점>
    • Java에서는 단일 상속만 허용하므로 주의한다.
    • 모든 클래스는 Object 클래스의 후손이며 컴파일러가 자동으로 추가한다.
    • 부모 클래스의 생성자, 초기화 블록은 상속되지 않는다.
    • 부모의  private 멤버는 상속은 되지만 직접 접근할 수는 없다.
    • * private 멤버는 super() 나 setter getter 로 접근해야 한다(간접)

27. super 와 super()

  • super : 상속을 통한 자식 클래스 정의시 해당 자식클래스 내에서 부모 객체를 가르키는 참조변수
  • super() : 부모 객체의 생성자를 호출한다. 컴파일러는 상속시 super()를 생성자 안에 자동으로 첫줄에 추가한다.

28. 오버라이딩

  • 오버로딩은 한 클래스 내에서 같은 이름의 다른 메서드를 작성하는 것이고
  • 오버라이딩은 상속 관계에서 자식 클래스가 부모에게 물려받은 메서드를 같은 이름으로
  • 재작성해서 사용하는 것을 의미한다.
  • <작성법>
  • @Override 애너테이션을 쓰고
  • 접근제어자는 부모와 같거나 더 넓게 
  • 예외 처리는 부모보다 좁게 
  • 1. 메서드 이름 동일
  • 2. 매개변수 개수, 타입, 순서 동일
  • 3. 리턴 타입 동일
  • 4. private 메서드는 오버라이딩 불가함

29. 다형성

  • 상속을 이용해 부모클래스 타입 참조 변수로 여러 자식 객체를 참조할 수 있는 것.
  • 업캐스팅 : 부모타입 참조 변수로 자식 타입 객체를 참조
  • Car -> Tesla 처럼 Car의 참조변수(주소)에 Tesla 객체를 만들어 그 주소를 참조 저장하게 하는것이다.
  • Car는 Tesla 고유의 것은 사용 할 수 없지만 Tesla가 Car로 물려받은 (Tesla안의 (Car)것들은 사용 할 수 있게 된다.
  • * = 부모 타입의 참조변수로는 자식 멤버를 쓸 수 없다.
  • 다운캐스팅 : 자식의 객체를 참조하고 있는 부모 타입의 참조변수를 다시 자식 타입의 참조 변수로 바꿔서 자식 멤버를 사용할 수 있도록 하는 것
  • 이 때 동적바인딩이 되게 된다.
  • =참조는 부모타입을 하고있음에도 자식이 가진  자식의 오버라이딩 메서드에서 부모 것이 아닌 자식의 오버라이딩 메서드가 실행되게 되는 것.

30. 추상화

  • 미완성된 것으로 자체 객체 생성이 불가하다. => 상속으로 사용
  • abstract 메서드가 포함된 경우 반드시 abstract 클래스여야 한다
  • 일반 변수와 메서드가 포함 가능하다
  • 객체 생성은 안되지만 참조형 변수 타입으로는 사용 가능하다
  • *추상 클래스 = 추상 메서드를 포함해 미완성 된 클래스 or 미완성이 아니더라도 객체생성이 되면 안되는 클래스
  • 장점 : 상속받은 자식에게 공통된 멤버를 제공하고 일부 기능 구현을 강제화 할 수 있다.

31. 인터페이스

  • 상수형 필드와 추상 메서드만을 작성 할 수 있다.
  • 목적 :
  • 일관된 인터페이스(작업환경) 제공
  • 상속받은 모든 클래스가 동일한 메서드 강제 오버라이딩 하도록 일관성 유지
  • 클래스 간의 접점을 강제로 만들어 줄 수 있다. (다중 상속 가능)
  • 모든 메서드 : public abstract
  • 모든 변수 : public static final
  • (없어도 컴파일러에 의해 강제로 써진다)
  • 객체 생성을 할 수 없고 참조 변수로는 사용할 수 있다 ( 다형성)

32. 오류 / 예외

  • 비정상 종료 -> 
    • 컴파일에러 : 코드 오류
    • 런타임 오류 : 논리 오류 -> if처리도 가능 할 수있다.
    • 시스템에러 : 오작동
  • 예외 : 소스코드 수정만으로 해결  가능한 오류를 말한다.
    • try- catch문(+finally : 무엇이 되든 마지막에 수행되는 구문)
      • 예외가 발생할 가능성이 있는 코드를 내부에 작성 시도해 발생하며
      • catch가 잡아내 오류시의 코드를 설정한다.
    • throws
    • throw

33. Wrapper 클래스

  • 기본 자료형을 객체화 시켜주는 클래스
  • 기본 자료형과 관련된 특정 값 기능을 제공하고 기본 자료형을 다룰 수 없는 경우에 사용한다.
  • 첫 문자가 대문자로 바뀌며 int -> Integer , char -> Character 로 예외적으로 바뀐다.
  • 모두 static으로 객체생성 없이 사용 가능하다.
  • 기본형과 객체타입 값 대입시 서로 자동으로 호환되도록 해주는 것을 박싱 / 언박싱이라고 한다.

 

+ Recent posts