일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바 제어문
- 자바 추상메서드
- Java 내부 클래스
- 자바 예제
- 자바 try-catch
- Java문자열 클래스
- Java객체배열
- java super( )
- 자바 String클래스
- 자바 Wrapper클래스
- DBMS
- 자바 내부 클래스
- Java thorw
- Express
- Java 추상 메서드
- database
- Java try-catch
- 코딩
- dbeaver
- 오라클
- 자바 문자열 클래스
- 자바 Random클래스
- Java추상클래스
- 자바 스트링클래스
- nodejs
- 데이터베이스
- Java다운캐스팅
- db
- Java업캐스팅
- oracle
- Today
- Total
코딩이란 무엇일까
java/자바[9일차]-클래스 본문
객체지향 프로그래밍이란?
객체지향이란 현실 세계의 객체 모델을 바탕으로 프로그램을 구조화하고 개발하는 기법을 말합니다.
프로그래밍 언어는 크게 구조적 특징에 따라 두 가지로 나누어집니다.
- 객체지향 프로그래밍 언어(Object-Oriented Programming Language) 대표적인 언어: java, C++
- 절차 지향 프로그래밍 언어(Procedure-Oriented Programming Language) 대표적인 언어: C언어
객체란?
객체는 하나의 독립적인 개체를 뜻합니다. 메서드(동작), 속성(필드, 데이터)으로 구성되어 있습니다.
사람으로 예를 들자면 사람은 이름, 나이와 같은 속성이 있고 걷다, 밥 먹다와 같은 동작이 있는 것이죠
클래스
클래스는 일종의 설계도입니다.
현실에서 객체는 갑자기 하늘에서 떨어지는 것이 아닌 , 설계도를 바탕으로 만듭니다.
핸드폰을 이용하기 위해서는 공장에서 설계도를 보고 핸드폰을 만드는 것과 같이 객체지향 프로그래밍에서도 메모리에서 사용하고 싶은 객체가 있다면 우선 설계도로 해당 객체를 만드는 작업이 필요합니다.
자바에서는 위에 설명한 설계도를 클래스라고 합니다.
클래스에서는 객체를 생성하기 위해서 위에 설명한 동작과 속성 즉, 메서드와 필드가 정의되어 있습니다.
인스턴스(instance)
인스턴스란 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 합니다.
클래스로부터 객체를 만드는 과정을 인스턴스화라고 합니다.
하나의 클래스로 여려 개의 인스턴스를 만들 수 있는데
동일한 설계도로 여러 대의 핸드폰을 만드는 것과 똑같은 것입니다.
new 연산자
new연산자는 클래스로부터 객체를 생성시키는 연산자입니다.
new 연산자 뒤에는 생성자가 오는데, 생성자는 클래스( ) 형태를 가지고 있습니다.
new 생성자( );
new연산자로 생성된 객체는 메모리 힙(heap) 영역에 생성됩니다.
Sample sam = new Sample( );
위의 실행문은 두 가지로 나눌 수 있습니다.
참조 변수(클래스 변수)를 선언
Sample sam;
new연산자로 객체 생성
sma= new Sample( );
위의 구조를 보면 알 수 있듯이
sam이라는 참조 변수를 선언하면 메모리 stack영역에 저장이 됩니다.
stack영역에 참조 변수를 저장한 뒤 new연산자로 참조 변수가 리턴된 객체의 주소를 저장합니다.
위의 내용을 정리해 보자면 sam이라는 클래스 변수를 생성한 뒤 new연산자를 사용하여 객체의 주소를 리턴하게 되며
이 주소를 참조 타입인 클래스 변수에 저장이 되어 객체를 사용할 수 있게 되는 것입니다.
클래스의 구성 멤버
클래스에는 객체가 가져야 할 구성 멤버가 선언됩니다.
구성 멤버에는 필드, 생성자, 메서드가 있습니다.
필드(field)
- 필드는 객체의 특성과 상태에 대한 값을 저장하는 곳입니다.
- 필드는 초기 값을 설정할 수 있습니다.
- 초기값이 없다면 기본값으로 0(정수),0.0(실수), false(boolean), null(참조 변수)를 갖습니다.
메서드(Method)
- 객체의 동작에 해당하는 중괄호{ } 블록을 말합니다.
- 메서드는 호출하면 { }블록에 있는 모든 명령들을 실행합니다.
- 메서드는 리턴 값이 있을 수도 있고 없을 수도 있습니다.
- 메서드는 객체 간의 데이터를 전달하는 수단입니다. 외부(호출한 곳)로 부터 매개 값을 받아 실행에 이용하고, 실행한 뒤 결과 값을 외부(호출한 곳)로 리턴할 수도 있습니다.
생성자
- 생성자는 인스턴스를 생성할 때 호출하는 특수한 목적의 메서드입니다.
- 객체를 생성할 때 혹은 변수를 초기화할 때 필요한 다른 객체를 생성하는 등의 작업을 처리합니다.
- 반드시 클래스 이름과 동일하게 작성해야 합니다.
- 모든 클래스는 생성자가 반드시 존재하며 하나 이상이 정의될 수 있습니다.
- 생성자 선언을 생략하면 컴파일러는 인자가 없는 기본 생성자를 실행하게 됩니다.
클래스 만들어보고 사용해보기
Sample 클래스
인스턴스 필드, 메서드와 static필드 , 메서드를 사용해보겠습니다.
public class Sample {
//필드
//인스턴스 필드
int a;
String b;
//static 필드
static int c;
static final String d="sample";
//생성자
public Sample() {
}
//메서드
//인스턴스 메서드
public void m1() {
System.out.println("::인스턴스 메소드 m1::");
System.out.println("a="+a+",b="+b);
}
public static void m2() {
System.out.println("::static 메소드 m2");
//System.out.println("a="+a+",b="+b);
System.out.println("c="+c+",d="+d);
}
public static void main(String[] args) {
}
메인 메서드
public static void main(String[] args) {
// Sample 클래스의 객체를 사용하는 테스트
//2개의 객체(인스턴스)를 생성
Sample sam1 = new Sample(); //Sample()는 생성자메소드 실행
Sample sam2 = new Sample();
//각 객체의 데이터(인스턴스 필드)를 저장합니다.
sam1.a = 10; sam1.b="java";
sam2.a = 20; sam2.b="python";
//각 객체의 필드를 이용하는 인스턴스 메소드를 실행합니다.
sam1.m1();
sam2.m1();
//static 메소드는 객체의 데이터는 사용하지 않는 객체와는 상관이없는 메소드 입니다.
//static 메소드가 사용하는 전역변수는 객체와 상관없는 static 변수만 가능합니다.
sam1.m2(); //static 메소드에는 적합하지 않은 실행 형식
sam2.m2();
Sample.m2(); //static 메소드는 클래스 이름으로 실행합니다.
}
출력 결과
위의 출력 결과에서 알 수 있듯이
sam1.m1( )과 sam2.m1( )의 결과가 다른 것을 볼 수 있습니다.
그 이유는 같은 클래스로 만들어진 인스턴스 이더라도 각각의 Sample객체는 자신만의 고유 데이터를 가지면서 메모리에서 활동하게 됩니다. 따라서 sam1과 sam2가 참조하는 Sample객체는 완전히 독립된 서로 다른 객체라는 것을 알 수 있으며 sam1.a=10 , sam2.a=20으로 값을 저장했기 때문에
sam1.a와 sam2.a는 서로 다른 값을 갖는 것을 알 수 있습니다.
'국비지원수업' 카테고리의 다른 글
Java/자바[10]일차(2)-Getter/Setter메서드 (0) | 2022.11.02 |
---|---|
Java/자바[10]일차(1)-접근 제한자 (0) | 2022.11.02 |
Java/자바[8일차]-배열에 데이터 삽입/삭제,전역변수,지역변수 (0) | 2022.10.31 |
JAVA/자바 프로그래머스 문제 풀기 [모음 제거],[문자열 내 p와 y의 개수],[문자열 다루기 기본 ] (0) | 2022.10.30 |
Java/자바[7일차]-배열,문자열 거꾸로 출력 (0) | 2022.10.29 |