본문 바로가기

자바 학습일지

필기 정리

절차지향 프로그램 - C, 순서가 중요함, 절차를 따라서 프로그램 하는 방식 : (java)배열
객체지향 프로그램 - JAVA, 기능이 중요함. 기능 위주의 프로그램하는 방식

객체(Object) - 생각하는 데이터 : 관념(ex, 와플 먹고 싶다~)
클래스(Class) - 생각하는 데이터를 만드는 설계도, 틀과 같은 개념 (ex, 와플 틀)
개체/객체(Instance) - 실제의 객체(ex, 실제 와플)

클래스의 정의 방법
public class 클래스 이름{ // 내가 표현하고 싶은 데이터의 이름
1. 멤버필드 : 변수, 상수
--> 내가 표현하고 싶은 데이터라면 가져야할 특성, 특징, 속성
--> 문법적으로 접근자, 지정저, 자료형, 변수명 [ = 값 ]

2. 생성자 : 객체를 찍어낼 때 사용
--> 멤버필드를 초기화하는 역할, 객체의 생성을 컴퓨터에게 알려줌(해시코드)
--> 문법은 클래스명(매개변수들){ }
--> 매개변수가 없는 생성자를 Default 생성자라고 하고 
--> 우리가 생성자를 하나도 만들지 않으면 자동으로 생성된다.

3. 메서드 : 함수 - 기능, 동작 : 내가 표현하는 데이터가 가져야할 기능
--> 접근자 지정어 반환형 메서드이름(매개변수들){
--> 우선 getter, setter, toString 3가지는 가급적 만들고 시작,

< 클래스 사용방법(객체사용방법) >
1. 객체의 선언 : 객체명 변수명 => MyClass myClass;
2. 객체의 생성(초기화) : 변수명 = new 생성자 => myClass = new MyClass();
3. 객체명.메서드명 또는 객체명.멤버필드의 형태로 사용함.
=> myClass.myMethod() 또는 myClass.myMemberField

< 접근제한자 >
1. private : 클래스 내부에서만 사용 -------------------> 은식화/캡슐화
2. default = package : 클래스 내부 + 같은 폴더
3. protected : 클래스 내부 + 같은 폴더 + 상속관계
4. public : 누구나 다

지정어
1. static
- 공유 : 메모리
- 가장 먼저 메모리에 잡힌다.  : 객체를 생성하지 않고 클래스 명으로 직접접근 간응
- 별도의 초기화 구문을 가지고 있고 한번만 초기화 된다.
- static 메서드 안에서 static 변수만 사용가능(단 클래스 멤버는 제외)
  static 변수는 static 메서드 안에서만 사용가능(단 클래스 멤버는 제외)
2. final
- 변수 앞에 붙으면 상수
- 메서드 앞에 붙으면 -> 오버라이딩을 못하게 함
- 클래스 앞에 붙으면 -> 상속을 못하게 함
3. native : 자바로 구현하기 힘든 기능을 다른 언어로 개발한 후 자바로 가져올때.
4. sychronized : 문을 잠구는 개념, 나중에 쓰레드와 함께(쓰레드 : 동시에 사용)

메서드를 사용하다보니 생긴 2가지 문제점
1. 반환되는 것을 하나 밖에 못 돌려받는다.
해결방안) 인가값 전달 방식으로 해결
1. call by value
2. call by referrence
3. variable arguement

2. 전역변수와 지역변수가 겹칠때. 전역변수를 어떻게 부르는가?
해결방안) this 포인터를 이용

메서드 오버로딩 : 메서드 중복정의
- 기능이 같으면 이름도 통일해서 쓰자
- 문법 매개변수의 갯수가 틀리거나 자료형이 틀리면 가능

생성자 오버로딩 : 사용자에게 다양한 생성방식을 제공하겠다. 문법은 동일
this : 나 자신을 가리키는 포인터
this() : 나의 생성자를 가르키는 포인터 ; 주의할점은 생성자 첫번째 줄에만 사용가능

클래스가 하나 이상일 경우
상속 : 물려받는 것 - 확장의 개념
동족간에는 extends 예약어
이족간에는 implments 예약어

오버라이딩 : 메서드 재정의
- 문법적으로는 모든게 같아야하고 접근자만 다를 수 있다. 하위가 상위보다 넓어야 함

단군같은 존재인 Object를 알게되고 toString을 오버라이딩해서 사용하라고 추천

super : 부모를 가르키는 포인터
super() : 부모의 생성자를 가르키는 포인터 - 생성자의 첫번째 줄에서 사용가능
상속받은 하위클래스의 생성자의 첫번째 줄에는 super() 생략되어 있음.
생성자를 만들때 default 생성자를 만드는 습관이 필요하다.

다형성(polymorphism) - 부모가 자식을 통제
- 하나의 타입의 참조변수로 여러타입의 객체를 참조하겠다.
- 멤버필드는 부모, 메서드는 자식
- 부모 = 자식의 형태 : Super s = new Sub();

추상클래스
- 추상메서드를 하나라도 가지고 있으며 그 클래스는 추상클래스가 된다.

추상메서드가 가지고 있는 특징
- 접근자 abstract 반환형 메서드 이름();
- 추상메서드를 가지고 있으면 객체생성을 못한다. : 상속해서 다형성을 이용해서 객체생성
- 추상메서드는 상속이 되면 하위클래스가 무조건 오버라이딩을 해야한다.

인터페이스 : 사람에 남자와 여자가 있듯이 자바에 클래스와 인터페이스가 있다
접근자 인터페이스이름{
1. 멤버필드 : 상수만 가능
2. 메서드 : 추상메서드만 가능
}

- 만든 이유 : 다중 상속을 하려고 만든것