*오늘의 학습 목표*
객체지향프로그래밍, 클래스, 메서드 개념을 90% 이상 이해하기
(1)객체지향 언어란?
객체지향 언어로는 자바, 파이썬이 대표적이라고 알고있음
(일단 무지한 나의 배경지식)
이제 책의 언어를 빌려보자면
"현실에 존재하는 사물과 개념들을 소프트웨어적으로 구현하고,
그 구현된 객체들이 상호작용하여 데이터를 처리하는 방식"
객체지향 언어의 특징으로는
코드의 재사용성 : 새로운 코드를 작성할 때 기존의 코드를 이용함으로써
코드의 수를 크게 줄일 수 있고 유지 보수에도 편리함.
신뢰성 높은 프로그래밍 : 제어자와 메서드를 사용해서 데이터를 보호함.
코드 관리의 편리함 : 객체지향 프로그래밍은 한 부분만 변경하면
관련된 모든 부분이 변경되므로 관리가 편리함.
(2)클래스와 객체
클래스란?
"객체를 만들기 위한 설계도"
+ 인스턴스(Instance)는 클래스를 통해 만들어진 실질적인 형태
※클래스의 사용
클래스는 구현하고자 하는 객체의 속성과 기능들을 정의하는 설계도.
속성을 변수로 기능을 메서드(함수)로
나타낸다고 보면
클래스는 변수와 메서드의 집합.
클래스로부터 인스턴스를 생성해야 변수와 메서드를 활용 가능함.
클래스명 변수명 = new 클래스명();
이는 클래스의 객체를 참조할 수 있는 참조변수를 선언하는 동시에
객체의 주소를 참조변수에 저장하도록 선언하는 것.
※참조변수 : 주소를 저장하는 변수
예를 들어
그동안 알고 있던 일반변수는 "a"라는 데이터를 저장하는 상자였던 것이고,
참조변수는 'a'라는 데이터가 저장되어 있는 주소를 저장하는 상자인 것.
참조변수로 인스턴스에 접근하는 방법은
변수에 접근할 경우 : 참조변수.변수명
메서드를 실행시킬 경우 : 참조변수.메서드명();

Test04_01.java

Test04_01.java(2)
Line16에서
→ 인스턴스 생성 코드
new 연산자를 통해 Car 인스턴스를 생성했고,
mycar라는 car 타입의 참조변수에 인스턴스 주소값을 저장한 것.
이후부터는 mycar.변수명 혹은 mycar.메서드(); 와 같은 형태로 활용.
tip)인스턴스를 여러 개 생성할 수 있음.
(예를 들어 mycar1, mycar2와 같이)

Test04_02.java

Test04_02.java(2)
(3)인스턴스변수와 클래스변수
인스턴스변수란?
객체마다 가지는 고유한 변수
인스턴스를 생성할 때 만들어짐.
클래스변수란?
모든 인스턴스가 공통된 값을 공유하는 변수
모든 인스턴스가 같은 저장 공간을 공유하며
클래스가 처음 메모리에 로딩될 때 생성됨.

Test04_03.java

Test04_03.java(2)
tip) 클래스 변수는 인스턴스를 생성하지 않아도
접근이 가능하지만
인스턴스 변수는 인스턴스가 생성된 후에만
접근이 가능함.
또한
변경 후에서 speed는 mycar2만 변경됐고,
wheel은 mycar1,2 모두 변경된 것을 보면
인스턴스 변수는 각 인스턴스마다 고유의 저장 공간을 갖고 있어
별개의 조정이 가능하고,
클래스 변수는 공통된 하나의 저장 공간을 갖고 있어
모든 인스턴스가 함께 공유된 다는 것을 알 수 있음.
(4)메서드
: 특정한 작업이나 논리를 구성하는 코드를 묶어 놓은 것
입력 값을 받아 내부에서 처리하여 결과를 출력 또는 반환 하는 역할을 함.(=함수)
메서드의 사용
반환타입 : 메서드의 반환 값의 타입을 정해주는 것
(반환하는 값이 없으면 반환 타입은 void로 지정)
메서드명 : 대부분 소문자로 시작하는 것이 일반적임
return값 : 반환 타입이 void인 경우를 제외하고는 반드시
메서드 내부에 return문이 포함되어야 함.
(return값은 반드시 하나)
예를 들어
와 같은 구성
※메서드도 클래스 메서드와 인스턴스 메서드로 구분

Test04_04.java

Test04_04.java(2)
변수 때와 마찬가지로
클래스 메서드는 객체를 생성하지 않아도
호출이 가능하지만
인스턴스 메서드는 객체를 생성해야만
호출이 가능해짐.
++++++++++
클래스 멤버와 인스턴스 멤버(P.98)
클래스 변수와 클래스 메서드를 클래스 멤버
인스턴스 변수와 인스턴스 메서드를 인스턴스 멤버라고 부름
인스턴스 멤버의 클래스 멤버 사용 → 가능
클래스 멤버의 인스턴스 멤버 사용 → 에러
인스턴스 멤버의 인스턴스 멤버 사용 → 가능
클래스 멤버의 클래스 멤버 사용 → 가능
같은 클래스에 속한 멤버들끼리는 인스턴스를 생성하지 않고도
변수를 참조하거나 메서드 호출이 가능.
하지만 클래스 메서드로 인스턴스 멤버들을 참조하는 것만은
에러 발생.
→ 클래스 멤버가 존재하려면 처음 클래스가
메모리에 올라가야 하는데 이때 인스턴스 멤버는 존재하지 않기 때문
(5)오버로딩
: 매개변수의 개수와 타입은 다르지만 이름이 같은 메서드를 여러 개 정의하는 것
예를 들어
메서드의 이름은 다르게 구분해야 하지만
같은 기능을 하는 메서드의 이름을 매번 다르게 하지 않고
같은 이름으로 설정해둔다면
개수와 타입이 알맞은 메서드를
프로그램이 알아서 호출함.
System.out.println(); 도
대표적인 오버로딩의 예
(6)생성자
: 인스턴스를 생성할 때 호출되어 인스턴스 변수들을 초기화하는 일종의 메서드
생성자의 이름은 클래스의 이름과 같으며
생성자에는 리턴 값이 없음.
그러므로 반환타입도 필요없음
기본 생성자
클래스이름(){ }
※모든 클래스에는 반드시 하나 이상의 생성자가 존재해야 함.
그러나 지금까지는 컴파일러가 자동으로
기본 생성자를 추가해줬던 것

Test04_05.java
Line15를 주의해서 보면
참조변수를 생성할 때 불러올 클래스 속 생성자에서
매개변수를 갖고 있으면
매개변수를 지정해 줘야함
//Cellphone myphone = new Cellphone(); 으로 하면 오류남.
기본 생성자 안에 직접 작성해서 사용할 수도 있음.
예를 들어
'백엔드개발 > Java' 카테고리의 다른 글
[Java] 일급 컬렉션 (0) | 2024.10.30 |
---|---|
[JAVA] StringBuilder (2) | 2024.10.12 |
[JAVA] BufferedReader와 Bufferedwriter (0) | 2024.10.12 |
[JAVA] 멘토씨리즈 자바 Chapter7 (3) | 2024.10.12 |
[Java] 멘토씨리즈 자바 Chapter02-Chapter05 (1) | 2024.10.12 |