카카오 클라우드 스쿨 12월 15일 (Java -Class)
OOP (Object Oriented Programming- 객체 지향 프로그래밍)
- java는 완전한 객체지향 언어 = java는 class이외의 공간에 실행되는 코드를 작성할 수 없음
객체지향
- 관련 있는 속성 과 기능을 하나로 묶어서 사용하는 것
1)특징
- Encapsulation(캡슐화): 속성과 기능을 묶는 것
- information hiding(정보 은닉): 불필요한 정보는 숨기고 필요한 부분만 외부로 노출 , 클래스와 인스턴스를 만드는 것
- Inheritance(상속):상위클래스의 모든 것을 하위 클래스가 물려받는 것
- Polymorphism(다형성):동일한 메시지에 대하여 다르게 반응하는 성질- 동일한 코드가 다른 메서드를 호출하는 것
2) 객체지향의 장점
- 재사용성이 증가(캡슐화 덕분에): 중복되는 코드를 클래스 단위로 작성을 해서 상속을 이용하면 재사용성이 증가
- 코드 관리 용이: 관련 있는 속성과 메서드를 묶어놓았기 때문에 관리하기 편리
- 신뢰성이 높은 프로그래밍이 가능 - 접근 제한(정보은닉의 기능)
Class 와 Instance
1)Class
- 동일한 목적을 가진 속성(변수- 데이터) 과 기능(메서드- method)의 집합
- 사용자 정의 자료형 : 개발자가 원하는 대로 만들어서 사용
- 유사한 인스턴스들의 설계도
- 자바에서는 클래스는 프록램을 실행할 때 정적 영역에 메모리를 할당해서 저장되고 정적인 형태로 존재합니다.
2)Object(객체)
- 프로그램에 존재하는 모든 것
- Class를 기반으로 만들어진 Object를 Instance
- int a = 10; 이면 a는 객체이지만 인스턴스는 아니다.
3)Instance
- Class를 기반으로 만들어진 Object
- new 라는 연산자로 constructor를 호출해서 생성
- 동적- 필요한 내용을 수정할 수 있고 삭제할 수 있습니다. 더만드는건 안됨
Class 구성요소
1)속성 (property): field, state, attribute
- static 속성 -class가 소유(공유)
- instance 속성 - instance 가 소유
2기능(method) :behavior(행위)
- static method: 클래스가 호출
- instance method: 인스턴스가 호출
3)Constructor(생성자)
- 인스턴스를 만들 때 호출하는 특별한 용도의 메서드
4)초기화 블럭
5)Nested Class
클래스 생성
- [public 이나 생략 - package][클래스 특성] class 클래스 이름 [extends 클래스 이름][implements 인터페이스 이름 나열] {
내용}
- IDE에서는 이름만 정하면 나머지는 선택할 수 있도록 해줍니다.
- public 부분은 접근제한자라고 하는데 클래스 안에 만들어지는 클래스는 private이나 protected도 가능
- 클래스는 특성으로는 abstract(추상- 상속을 통해서만 사용) 나 final(종단 -상속을 할 수 없는 클래스 ) 이 가능
- extends는 상속을 받고자 하는 경우에 사용하는 것으로 생략하면 java.long.Object 클래스로부터 상속받음
- implements는 인터페이스를 구현하고자 할 때 사용
- 클래스 이름은 대문자로 시작하는 것이 관례
- 소스 파일 이름
- 하나의 파일 안에 존재하는 클래스 이름으로 만들어져야 함
- 하나의 파일에 여러개의 클래스를 만드는 것이 가능한테 public클래스는 1개만 생성
- 여러개의 클래스가 존재할 때는 public 클래스의 이름으로 파일 이름을 설정해야 합니다.
- public 클래스가 없는 경우에는 아무 클래스 이름이나 상관없음
- 하나의 파일에 여러개의 클래스를 만들고 컴파일을 하게되면 클래스 파일은 여러개가 됩니다.
- 이렇게 만들어진 클래스 파일을 자바에서는 byte code라고 합니다.
- 이 bute code 를 JRE(JVM이 JRE보다는 작은 개념)가 보고 운영체제가 이해할 수 있는 코드로 번역해서 실행합니다.
인스턴스 생성
- new 라는 연산자를 이용해서 생성자를 호출하면 Heap 영역에 메모리 할당을 하고 그 참조를 리턴
- 생성자 이외의 메서드를 이용해서 만들어진 것은 디자인 패턴이 적용되서 내부적으로 생성자를 호출해서 리턴하거나 메서드 내부에서 적적 생성해서 리턴하는 경우이지 생성자를 호출하지 않고는 인스턴스를 생성할 수 는 없음
- new를 이용해서 생성자를 호출하면 참조를 리턴하는데 이 참조를 저장하지 않으면 이 인스턴스는 다시 사용할 수 없습니다.
new 생성자(매개변수); //인스턴스 생성 구문
클래스이름 참조형변수 = new 생성자(매개변수); //인스턴스를 생성하고 재사용하기 위해서 인스턴스의 참조를 변수에 기억시키기
- 인스턴스 소멸:인스턴스를 참조하는 변수가 없으면 인스턴스는 메모리 정리 대상이 됩니다.
참조형 변수 =null; //정리 대상이 될 수는 있는데 다른 참조형 변수가 가리키고 있으면 정리 대상이 안되고 정리 대상이 되더라도 바로 소멸되지 않고Garbage Collection이 나중에 메모리 정리를 합니다.
속성이나 메서드 호출
- 클래스 이름이나 인스턴스이름.속성이름 또는 메서드이름(매개변수 나열)
- 클래스 내부의 메서드 안에서 자신의 속성이나 메서드를 호출할 때는 클래스 이름이나 메서드 이름을 생략할수 있습니다.
- entry point 에 해당하는 메서드는 java클래스이름 만으로 호출
클래스와 인스턴스 만들기
- 클래스를 만들어서 사용할 때는 사용할 클래스들을 별도의 파일에 만들고
main 메서드를 소유한 클래스에서 이 클래스들을 호출해서 사용
Method
- 전달받은 인수를 처리해서 결과를 돌려주는 작은 프로그램
- function이라고 하기도 하는데 function은 전역공간에 만들어져서 어디서나 호출할 수 있는 거싱고 method는 클래스 안에 만들어져서 클래스 나 인스턴스를 통해서만 사용할수 있는것으로 분류합니다.
return
- 메서드의 수행을 종료하고 호출한곳으로 돌아가는 명령어
- return 뒤에 있는 문장은 수행되지 않습니다.
- 메서드를 호출하면 메서드를 호출하기 위한 참조를 기억하기 때문에 메서드의 호출 결과로 하나의 데이터를 받을 수 있습니다.
- 이렇게 데이터를 받고자 할때 return 다음에 돌려줄 데이터를 기재하면 됩니다.
- 자바에서는 이렇게 데이터를 돌려둘 때는 메서드 이름 앞에 돌려줄 데이터의 자료형을 기재해야 합니다. => 없으면 void 라고 적어야 합니다.
parameter, argument
- 메서드를 호출할 때 호출하는 곳에서 넘겨주는 데이터
- 없을수 있고 개수 제한은 없습니다.
- 여러개가 되면 순서를 기억해야하기 때문에 매개변수가 여러개인 경우는 그 여러개를 포함하는 클래스를 만들어서 사용하는것을 권장합니다.
- 클래스 대신에 map을 쓰는경우가 있는데 비추천. map은 가독성 떨어짐.