객체 지향

노건우·2023년 7월 9일
0

객체 지향 언어란?

객체가 중심이 되는 프로그래밍 기법

  • 객체란?
    프로그래밍에서의 객체
    ->프로그램에서 표현하고자 하는 기능을 묶기위한 단위

  • 클래스
    객체의 설계도 역할을 하는 프로그램 소스
    -공장에서 하나의 설계도를 사용하여 여러 개의 제품을 생산할 수 있는 것처럼 하나의 클래스를 통해 동일한 구조를 갖는 객체를 여러개 생성할 수 있다.
    -동일한 설계로 만들어진 자동차라 하더라도 각각의 자동차를 구성하는 부품들은 그 형태만 같을뿐, 실제로는 각각 존재하게 된다.
    -클래스를 작성하면서 그 안에 생성되는 멤버변수들은 여러 개의 객체간에 서로 동일한 이름으로 존재하지만 실제로는 서로 다른 값이라는 의미

  • 객체의 생성 및 할당 방법
    객체를 선언
    클래스 이름 객체이름;
    -객체의 할당
    객체이름 = new 클래스 이름();
    -선언과 할당의 통합
    클래스 이름 객체이름 = new 클래스 이름();

  • 객체의 사용
    -객체 안에 포함된 변수가 메서드는 점(.)으로 연결하여 접근한다.
    ->객체이름.멤버변수 = 값;
    ->객체이름.메서드이름();
    ->객체이름.메서드이름(값1,값2,..);

  • 클래스를 정의하면서 멤버변수에 값을 직접 대입하는 경우
    -객체를 생성함과 동시에 객체안에 name변수와 age변수가 할당된 값을 포함하게 된다.
    -같은 클래스로 객체를 여러개 생성할 경우, 모든 객체가 동일한 값을 갖게 된다.
    -멤버변수의 값을 지정하기 전까지의 사용될 "기본값"으로서의 의미이다.
    -일반적으로 클래스 작성시에는 멤버변수에 값을 지정하지 않는다.

변수

  • 변수의 종류
    전역변수와 지역변수가 있다.
  • 전역변수
    클래스 안에서 선언된 변수로서, 클래스 블록 범위안에서 유효하다.
  • 지역변수
    메서드 안에서 선언된 변수로서, 메서드의 블록을 빠져나가지 못한다. 그러므로 다른 메서드는 해당 변수를 인식하지 못한다.
    이 규칙은 조건, 반복문과 같은 블록{}을 형성하는 모든 경우에 해당한다.

this

  • 자기자신을 의미하는 키워드
    -클래스 안에서 this를 사용하여 "자기자신"을 표현하기 위해 사용된다.

    위의 사진 같은 경우 이미 전역변수로 name, num가 선언되어 있다. 이때 this를 이용해 name,num를 표현한다.
  • this를 사용해 파라미터와 멤버변수 구분하기
    파라미터도 해당 메서드 안에서만 유효한 지역변수의 일종이다.
    파라미터를 사용하여 멤버변수의 값을 간접적으로 설정하고자 할 경우, 변수의 이름을 서로 다르게 사용하는 것 보다는 이름은 동일하게 지정하고
    this키워드를 사용하여 멤버변수와 파라미터를 구별하는 것이 자바 언어의 일반적인 처리 방식이다.

class User{
String name;
public void setName(String name){
this.name = name;
}

}

User u = new User();
u.setName("자바학생");
system.out.println(u.name);//자바학생 출력됨

모든 멤버변수 앞에는 this키워드를 사용하여 멤버변수임을 직관적으로 표시하는 것이 소스코드의 가독성을 위해 바람직하다.

생성자

  • 생성자란?
    Member member = new Member();
    -ew 키워드를 사용하여 객체가 생성될 때 자동으로 실행되는 특수한 형태의 메서드
    리턴형을 명시하지 않으며, 메서드의 이름은 클래스와 동일하다.

    class Member{
    		Member(){
    			//이 안은 객체가 생성될 때 자동으로 호출된다.
    		}
    	...

    }

    자동으로 실행된다는 특성 때문에 객체가 생성되면서 해당객체의 특성을 초기화하기 위해 사용
    (ex. 멤버변수의 초기값을 할당하는 용도)//암기

  • 기본 생성자
    파라미터가 없는 생성자
    클래스에 특별히 생성자가 정의되지 않은 경우 java컴파일러는 다음과 같은 기본 생성자가 존재한다고 인식한다.
    class User{
    user(){
    //생성자가 있지만, 내용이 비어있다.

    }

}
파라미터를 갖는 생성자.
생성자도 메서드의 한 종류이므로, 파라미터를 함께 정의하는 것이 가능하다.
생성자의 파라미터를 멤버변수에 복사하는 것으로, 객체의 초기화를 외부적인 요인에 의해 처리할 수 있다.

class Student{
	String name;
	int age;
	
	Student( String name, int age){
			//생성자 파라미터의 값을 멤버변수에 복사
			this.name = name;
			this.age = age;

	}
}

Student std = new Student();//이건 에러난다.

//생성자의 파라미터가 정의된 경우 객체 생성 구문에서 해당 파라미터를 전달해야 한다.
Student std = new Student("자바학생",20);

  • 은닉성
    은닉성이란?
    멤버변수나 메서드가 객체에 노출되지 않도록 설정하는 기법
    객체를 사용하는 측의 실수로 인한 기능의 오작동을 방지하기 위해, 클래스의 일부를 숨기는 처리
    적용방법
    변수의 이름이나 메서드의 이름앞에 "접근 한정자"를 지정한다.
    public ->모든 곳에서 접근 가능하다. 일반적으로 모든 메서드 앞에 명시한다.

private, ->클래스 안에서만 사용가능, 객체를 통해 접근 불가, 일반적으로 모든 멤버변수 앞에 명시

protected ->현재 클래스 내의 다른 자원이나. 같은 패키지 안에 존재하는 클래스와 하위 클래스에서 접근 가능하다. 잘 사용하지 않는다.

default ->접근 한정자를 명시하지 않은경우, 현재 클래스 내의 다른 자원이나 동일 패키지 내의 다른 클래스에서 접근 가능하다.

이렇듯 System.out.println(user.weight);는 private이므로 접근이 불가하다는 것을 확인할 수 있다.

  • getter,setter
    멤버변수가 은닉된 형태로 선언된 경우 프로그램의 가장 근본적인 목적인 데이터에 접근하는 방법이 사라지므로, 메서드를 통해 간접적으로 접근하는 방법이 마련되어야 한다.
    getter,setter는 은닉된 멤버변수에 간접적으로 접근하기 위해 정의된 메서드들을 의미하는 용어이다.
    ->getter : 은닉된 멤버변수의 값을 리턴하기 위한 메서드
    ->setter : 파라미터로 전달된 값을 멤버변수에 복사하기 위한 메서드
    getter setter
    String userName String get Username() void setUserName(String userName)
    int userAge int getUserAge() void setUserAge(int userAge)
    ->get과 set 접두사 뒤에 변수이름을 첫 글자가 대문자인 형태로 명시
    ->getter는 연결된 멤버변수의 데이터 타입을 리턴형으로 명시
    ->setter는 연결된 멤버변수의 데이터 타입을 파라미터 형으로 명시



사용예시.

  • 클래스의 분리
    하나의 소스코드에서 프로그램의 모든 기능을 구현하게 되면
    유지보수에 비효율적이므로 기능단위로 소스코드를 분리해야 한다.
    소스코드가 분리된 클래스끼리는 public이 명시되어야만 서로 객체 생성이 가능
    일반적으로 클래스 정의에는 public 접근 한정자만 사용한다.
    하나의 소스코드에는 하나의 public클래스만 존재할 수 있다.
profile
초보 개발자 이야기

0개의 댓글