본문 바로가기
개발/교육

(Java) 6일차

by kakk789 2022. 4. 4.

클래스(Class)

기본 자료형 만으로는 프로그램하기 번거로워서 새로운 자료형의 개념으로 직접 만들어서 사용

객체 지향 프로그래밍 (Object Oriented Programming, OOP)

  • 현실 세계의 모든것을 객체화 할 수 있다.
  • 눈에 보이는 것일 수도 있고, 눈에 보이지 않는 개념적인 것일 수도 있음.
  • 속성(데이터), 동작(기능)을 분석하여 클래스로 만들어야한다
사람      Person
    속성  (멤버 변수)
           이름         String name  "홍길동"
           나이         int age         20 
    동작  (멤버 메소드)
           먹다         void eat(String food)
           씻다         void wash(String soap)

객체는 new를 이용하여 생성

		Person kim = new Person();

스택, 힙

  • 일반 자료형의 변수들은 스택에 저장 되지만 객체의 변수들은 힙에 만들어진다.(new 객체명( ) 이 실행 될 때 힙에 할당)
  • 이때 힙에 할당되어 있는 데이터들을 멤버 라고 표현하고 이 멤버로 접근하기 위한 연산자 멤버 접근 연산자( . )라고 부른다.

객체지향 프로그래밍의 특징

1. 은닉성 (Encapsulation)

  • 클래스를 구성하고 있는 구성요소들을 외부의 다른 클래스로부터 보호하는 것을 말한다
  • 모든 구성요소를 보호하게 되면 해당 클래스 사용이 불가능하다. 그래서 "접근 명시자"를 이용한다.
접근 명시자 ( https://dlckdgml.tistory.com/9 ) 참고
- private
- public
- protected
  • 보통 클래스를 만들 때에는 멤버 변수들은 private으로 지정
  • 멤버 메소드들은  public으로 지정
  • 하지만 강제성은 아니고 필요에 따라 바뀔 수 있다.
  • private에 있는 멤버변수에 접근하기 위해서는 public에 있는 메소드를 통해 접근하도록 클래스를 만든다.
    그러니까 get, set을 이용하여 멤버변수를 설정한다는 의미.

getter, setter

  • 자바에서는 멤버변수에 직접 접근을 허용하지 않고 getter, setter를 이용하여 접근한다.
  • 그 이유는 변수값에 직접 접근하게 되면 값이 변하게 되고 그러면 데이터 무결성이 깨질 수 있기 때문이다. 
public void setName(String name) { this.name = name; }
public void setAge(int age) { this.age = age; }
public String getName() { return this.name; }
public int getAge() { return this.age; }

생성자(Constructor)

  • 클래스 이름과 같은 이름을 가진 메소드
  • 객체 생성 시 자동 수행됨
생성자는 호출문에 의해 동작하는 것이 아니고, 객체 생성 시 자동 수행되기 떄문에 return의 개념이 없다
그래서 리턴 타입을 쓸 필요가 없다.
public  클래스명( ) {
     초기화 할 값들;
}

기본 생성자

  • 매개변수를 갖지 않는 생성자를 말하며 Java는 사용자가 생성자를 하나도 만들지 않으면 기본 생성자를 제공
  • 만약 사용자가 생성자를 한개라도 만들기 시작하면 자바는 더이상 기본 생성자를 제공하지 않음

생성자의 중복(Overloading)

  • 생성자를 여러개 만들 수 있음
  • 조건은 매개변수의 개수나 자료형이 다른 경우 중복해서 사용 가능하다.

아래 코드 예시는 모두 동작 가능한 생성자

	public Person(String n, int a){
		name = n;
		age = a;
	}
	
	public Person(){
		name = "매개변수 한개도 없음";
		age = 0;
	}
	
	public Person(String n){

	}
	
	public Person(int  n){

	}

this

  • 같은 클래스 내애서 매개변수와 멤버변수의 이름이 같을 경우 구분짓기 어렵기 때문에 멤버 자신을 구별하기 위한 용도로 this 를 붙여서 자기 자신임을 표현

this( )

  •  생성자가 중복 정의되어 있을 경우 생성자 안에서 또 다른 생성자를 요구할 때에 사용하는 명령
주의사항 
- 반드시 생성자의 첫번째 문장에 와야한다. (바로 아래 그림 확인)
- 해당 그림은 에러이다. this()가 첫번째 문장에 오지 않았기 때문이다.

비정상 동작 화면(에러)

정상동작 화면

생성자에 대해 서술하시오

  • 클래스 이름과 동일한 이름의 메소드를 말하며 객체 생성 시 자동 수행되어 멤버변수들의 값을 초기화 할 목적으로 사용하는 특수한 메소드
  • 생성자는 호출문에 의해서 동작하는 것이 아니라 객체 생성 시에 자동 수행하기 떄문에 리턴의 개념이 없다.
    따라서 생성자 이름의 왼쪽에 리턴 값이 오지 않음 
  • 생성자는 중복하여 정의할 수 있음(Overload)
    단,
     중복하여 정의하기 위해서는 매개변수의 개수나 자료형이 달라야 함.
  • 사용자가 생성자를 하나라도 만들지 않으면 기본생성자가 제공되지만 하나라도 만들기 시작하면 더이상 기본생성자는 제공되지 않음

this와 this()에 대하여 설명하시오

  • 메소드나 생성자의 매개변수 이름을 의미있는 이름으로 정해주다 보면 멤버이름과 동일하게 됩니다. 이때에 멤버 자신을 구별할 목적으로 this를 사용
  • this()는 생성자가 중복정의 되어있을때 생성자 안에서 다른 생성자를 호출할 때 사용됨.

이클립스 getter, setter 자동 생성 방법

우클릭 -> source -> Generate Getter And Setters

이클립스 생성자(Constructor) 자동 생성

우클릭 -> source -> Generate Constructor using field (매개변수가 있는 생성자)
우클릭 -> source -> Generate Constructor From superclass (매개변수가 없는 생성자)

2. 상속성

3. 다형성

반응형

'개발 > 교육' 카테고리의 다른 글

(Java) 9일차  (0) 2022.04.07
(Java) 7일차  (0) 2022.04.05
(Java) 5일차  (0) 2022.04.01
22033) 숙제 4번, 4지 선다형  (0) 2022.03.31
(Java) 3일차  (0) 2022.03.30

댓글