ch07. 클래스

09Roalwlzm01·2022년 10월 1일

Java

목록 보기
5/15

개발론

80~90s

< 절차지향 (연산지향) >
- 객체보단 연산에 초점을 맞춤


90s~ing

< 객체지향 >
- 객체에 초점을 맞춤


2010~ing

< 함수지향 >
( ) => ...... // 순수 함수 사용


7.1 객체지향 프로그래밍(OOP)

정의

주위 모든 사물을 뜻하는 객체라는 개념을 프로그래밍에 도입해서 실제 세상에서 사물의 속성과 기능, 사물간의 관계를 컴퓨터 프로그램에서도 사용할 수 있게 프로그래밍하는 방법


장단점



특징

1. 상속
: 부모가 자식에게 물려주듯 객체지향 프로그래밍에서도 부모가 가지고 있는 여러 속성과 기능들을 자식이 그대로 물려받을 수 있음


2. 다형성
: 다양한 모양(타입)을 갖는 성질(특성), 부모/자식간의 관계가 있는 클래스는 자식이 부모의 타입으로 변환 가능, 같은 모양의 코드가 다른 행위를 하는 것


3. 추상화
: 개발자들이 구현하기 전에 객체들의 특징이나 속성들을 파악하고 설계하는 과정


4. 캡슐화 (정보은닉/독립화)
: 1. 관련있는 속성이나 기능들을 하나로 묶어 담아둬서 관리하기 편하도록 함
2. 속성이나 기능들을 객체 내부에 숨겨 놓고 외부에서 불필요한 정보를 볼 수 없도록 해서 객체 내부에 문제가 생기지 않도록 보호하며 꼭 필요한 속성이나 기능만 외부로 노출(정보 은닉)


7.2 클래스와 객체




7.3 클래스의 구조

클래스는 크게 속성과 기능으로 나눌 수 있다. 속성은 클래스가 가지고 있는 특징, 변수로 표현하고, 기능은 메서드라고 표현한다.


1. 필드 (명사)(구조체)
: 객체의 특징이나, 특성 값을 저장하는 곳 -> 클래스 안에 있는 변수(but, 생성자나 메서드 안에 있는 변수와는 다름, 생성자와 메서드 안의 변수는 그 안에서만 사용되지만 필드는 클래스 내부의 전체에 사용)


2. 매서드 (동사)
: 동사화시킬 수 있는 것
매서트 특징 ) 끝날 때 ( )가 있어야함


3. 생성자
: 객체를 생성할 때 사용되는 부분으로 메서드와 비슷하게 생겼지만, 클래스명과 이름이 같고, 리턴값이 없음


4. 자료구조적인 개념의 클래스
:
<데이터타입의 변천사>

  • 변수 : 하나의 공간에 하나의 값만 저장할 수 있는 자료구조
  • 배열 : 하나의 변수에 같은 자료형의 여러 값을 저장할 수 있는 자료구조
  • 구조체 : 다양한 데이터타입의 값을 여러개 저장할 수 있는 자료구조
  • 클래스 : 데이터와 기능을 함께 저장할 수 있는 자료구조


1번 색을 바꿨는데 모조리 다 색이 바뀐 이유
: Car 역시 참조자료형이기 때문이다. cars[0], cars[1], cars[2] 모두 같은 주소값을 갖고 있기 때문에 하나의 객체에 필드의 값을 변경해도 모두 변경이 되는 것이다. 정확히 얘기하면 모두 바뀌는 것이 아니라, 값이 저장된 곳은 하나고 이 값을 바꾸면 이 값을 참조하고 있는 모든 변수도 바뀐 값으로 참조하게 된다.


7.4 필드

class Iphone14plus {
// 멤버
	String color;	// 인스턴스 변수
    Static size += 6.5	// 클래스 변수/공유
// 메소드
	void call(){
    	지역변수
    }
}

7.5 메서드

메서드 : class 안에 있는 함수
함수 : only 함수

  • 메서드 == 함수 이지만 차이점이 있다.

메서드의 구조

접근제한자 리턴타입 메서드명 (매개변수...) {
	실행문
    ...
    return;
}

리턴타입

리턴되는 타입을 말하며 돌려주는 데이터 타입을 의미한다. 메서드는 특정 기능을 실행한 후 어떤 값을 실행한 곳으로 돌려줄 수 있는데, 이 돌려주는 값의 데이터 타입(자료형)을 이 곳에 정의한다. 메서드는 리턴값이 있을 수도 있고 없을 수도 있다. 만약 리턴값이 없다면 void라고 적어줘야 한다. main() 메서드도 리턴값이 없어 void가 적혀 있다. 만약 리턴값이 정수라면 int, 문자열이라면 String이라고 적어줘야 한다. 반대로 메서드 선언부에 String이라고 적었다면 메서드 중괄호 블록 내에서 반드시 String을 리턴값으로 정의해줘야 한다.


메서드명 작성 규칙

변수명 작성 규칙과 같다. 영문 소문자로 작성하되 만약 두 단어 이상으로 이루어져 있다면 camel식으로 작성해야 한다.


매개변수

매개역할을 하는 변수이다. 메서드 블록 안쪽과 메서드가 실행되는 곳을 변수로 연결해준다. 매개변수의 개수가 정해져 있는 경우가 대부분이지만, 간혹 매개변수가 몇개가 올지 알 수 없는 경우가 있다. 이럴때 첫 번째 방법은 매개변수를 배열로 선언하는 방법이고, 두 번째는 매개변수를 선언할 때 타입과 변수명 사이에 ... 을 추가하고 선언하는 것이다.

  • 숫자를 기입하고 그 숫자 중 가장 큰 수와 가장 작은 수 출력하는 class 만들기
  • max와 min을 분리하고 나왔던 값 중 가장 큰값과 가장 작았던 값 출력

  • 그 값들을 사칙연산 해주는 class

리턴값

메서드를 선언할 때 선언부에 리턴타입을 지정해둔 경우 반드시 리턴값을 지정해야 한다. 반대로 선언부에 리턴타입을 void로 선언한 경우는 리턴값을 지정할 수 없다. return은 값을 가지고 돌아가거나, 그냥 돌아가는 경우에 사용한다. return 뒤에 값이 있으면 값을 가지고 돌아가고, 없으면 그냥 돌아가게 된다. 그래서 return문을 메서드의 실행을 중지하는 용도로도 사용한다.
ex) 이스터에그


메서드의 실행순서

  • 스택(stack) 과 순서가 동일하다.

메서드 오버로딩

클래스 내에서 이름이 같은 메서드가 여러개 있는 것. 필요한 이유는 매개변수를 다양하게 입력받게 하기 위함이다.


7.6 생성자

사용법

생성자는 new 연산자와 함께 객체를 생성할 때 사용한다. 생성자는 메서드와 비슷하게 생겼지만, 클래스 이름과 생성자 이름이 동일해야 하고, 리턴값이 없어서, 리턴 타입을 아예 적어주지 않는다.


생성자의 구조

생성자명이 곧 클래스명이다. 생성자도 매개변수가 있을 수도 있고, 없을 수도 있다. 중괄호로 블록이 구분되면, 리턴값은 존재하지 않는다.

클래스명(매개변수...){
	초기화 실행문
    ...
}


기본 생성자

  • 커스터마이징을 한 경우가 아닐 경우 전부 커스터마이징한 것을 따름.
  • 커스터마이징을 하는 방법

생성자 오버로딩

메서드 오버로딩과 동일. 매개변수 타입이 (문자열, 정수)이면 에러가 발생한다.


7.7 this

this 생성자

this는 두 가지

  • this( ) - 생성자
  • this. - 자기참조


7.9 패키지

패키지는 폴더라고 생각하면 쉬움. 자바에서 클래스들을 폴더 별로 묶어서 관리하기 위한 단위. 원래 클래스의 이름은 패키지명까지 포함된다.
상위패키지. 하위패키지. 클래스명

import

클래스명 대신 * 를 사용하면 해당 패키지의 모든 클래스를 import 하겠다는 의미가 된다. (비효율적)

import chapter07.test.*;

7.10 접근 제한자


  • private를 사용했으므로 다른 곳에서 사용할 수 없음.

7.11 싱글톤

디자인 패턴의 일종

디자인 패턴이란

좋은 코드를 짜기 위한 방법.

싱글톤

클래스의 객체를 하나만 만들어야 하는 경우 사용함. 클래스 내에서 인스턴스가 단 하나뿐임을 보장하므로, 프로그램 전역에서 해당 클래스의 인스턴스를 바로 얻을 수 있고, 불필요한 메모리 낭비를 최소화한다.

0개의 댓글