728x90
✔️ 배열
배열 : 서로 같은 타입의 여러변수를 하나의 묶음으로 다루는 것
인덱스 : 배열의 요소마다 붙여진 일련번호(인데스 < 배열의 길이)
int a,b,c,d,e; //배열을 사용하지 않는다면 변수를 다 선언해야한다.
//<배열 선언>
//타입[ ] 배열명 = new 타입[배열길이];
int arr[]=new int[5]; //배열을 통해 5개의 int값을 저장한다.
int arr[]={1,2,3,4,5};//생성과 초기화를 동시에
for(int i=0;i<arr.length;i++){ //배열 출력
System.out.println(arr[i]);
}
System.out.println(Arrays.tostring(arr)); //배열 출력
배열의 복사
System.arraycopy(원본,읽어올 위치, 복사하려는 배열,시작 위치, 복사길이);
String 배열
String arr[]={"kim","park","yi"};
String 주요 메서드
1) charAt
String s = "abcde";
char c = s.charAt(2);
출력결과
c
2) toCharArray()
- String을 Char형 배열로 변환
String str="Hello";
char arr[] = srt.toCharArray();
3) substring
- 문자열 일부를 잘라낼 수 있게 해주는 메서드
- 문자열명.substring(시작,끝);
String str = "Hello"
String temp= str.substring(1,3);
출력결과
temp = "ell"
4) equals
- 문자열은 "=="가 아닌 equals를 이용하여 비교해주어야함
String str="abc";
if(str.equals("abc"));
출력결과
true
2차원 배열
- 타입 배열명[][]=new 배열명[행][열];
int arr[][]={{1,2,3}, {4,5,6}, {7,8,9}};
int | 열 | ||
행 | 1 | 2 | 3 |
4 | 5 | 6 | |
7 | 8 | 9 |
✔️ 클래스와 객체
클래스 : 객체를 정의한 것
객체 : 실제로 존재하는 것
ex)
클래스객체
제품 설계도 | 제품 |
TV설계도 | TV |
붕어빵 기계 | 붕어빵 |
인스턴스 : 클래스로부터 만들어진 객체
- 객체의 구성요소
1.속성 : 멤버변수, 특성, 필드, 상태
2.기능 : 메서드, 함수, 행위
ex) Tv클래스의 속성과 기능
class Tv{
//속성(변수)
String color; //색
boolean power; //전원상태
int channel; //채널
//기능(메서드)
void power(){
power=!power;
} //전원끄고켜기
void channelDown(){
channel--;
}//채널 내리기
void channelUp(){
channel++;
}//채널 올리기
}
class TvTest {
public static void main(String[] args) {
Tv t= new Tv(); //참조변수 t선언 후 인스턴스 생성
t.channel=7; //tv인스턴스 멤버변수 값 지정
t.channelUp(); //tv인스턴스 메서드 호출
System.out.println("채널의 값은 "+t.channel+" 입니다.");
}
}
출력결과
채널의 값은 8 입니다.
✔️ 변수와 메서드
클래스 변수 : static이 붙은 멤버변수
인스턴스 변수 : static이붙지 않은 멤버변수
지역 변수 : 멤버변수를 제외한 나머지 변수
변수 | 선언위치 | 저장공간 | 특징 |
인스턴스 | 클래스 | 독립적 | 서로 다른값을 가질 수 있음 |
클래스 | 클래스 | 공통 | static과 함께 선언해야함 |
지역 | 클래스 이외의 영역 | 독립적 | 메서드 내에서만 사용 가능 |
class test{ //클래스 영역
int i; //인스턴스 변수
static int j; //클래스 변수
void method(){ //메서드 영역
int k; //지역변수
}
}
- 클래스 변수는 객체 생성 없이 '클래스이름.클래스변수명' 을 통해 직접 사용가능
public class Card {
//고유값을 가져야 하는 카드의 무늬와 숫자는 인스턴스변수로 선언
String kind;
int number;
//공통된 값을 가져야하는 길이와 폭은 클래스 변수로 선언
static int width=100;
static int hight=200;
}
class CardTest{
public static void main(String[] args) {
//인스턴스 객체 생성
Card cl =new Card();
cl.kind="heart";
cl.number=7;
System.out.println("카드 cl은 "+cl.kind+", "+cl.number+"이며 크기는 ("+Card.hight+", "+Card.width+") 입니다.");
}
}
출력결과
카드 cl은 heart, 7이며 크기는 (200, 100) 입니다.
- 메서드
선언부와 구현부로 이루어짐 - 메서드의 반환타입
결과의 반환값이 없는 경우 void를 적음 - 메서드의 return문
반환타입이 void가 아닌 경우 꼭 'return 반환값'을 적어줘야함
//선언부
int add(int a,int b){ //반환타입 메서드 이름(타입 변수명, 타입 변수명...)
//구현부
int result= a+b;
return result;
//지역변수 : a, b, result
}
public class Math {
int add(int a, int b){return a+b;}
int minus(int a,int b){return a-b;}
}
class MathTest{
public static void main(String[] args) {
Math mm=new Math(); //객체 생성
int result = mm.add(3,5); //add메서드 호출
int result2 = mm.minus(9,4); //minus메서드 호출
System.out.println("add: "+result);
System.out.println("minus: "+result2);
}
}
출력결과
add: 8
minus: 5
매개변수
- 기본형 : 기본형 값이 복사 됨 / 변수의 값을 읽기만 가능 (only read)
- 참조형 : 인스턴스 주소가 복사 됨 / 변수의 값을 읽고 쓸 수 있음 (read & write)
<기본형>
class Data{ int x;}
public class Main {
public static void main(String[] args) {
Data d =new Data();
d.x=10;
System.out.println("main() : x = "+d.x);
change(d.x);
System.out.println("After change(d.x) : x = "+d.x);
}
static void change(int x){
x=1000;
System.out.println("change() : x="+x);
}
}
출력결과
main() : x = 10
change() : x=1000
After change(d.x) : x = 10
- change메서드가 호출되면서 d.x가 change메서드의 매개변수 x에 복사됨
- change메서드이 x가 1000으로 변경
- change메서드가 종료되면서 매개변수 x는 스택에서 제거
<참조형>
class Data{ int x;}
public class Main {
public static void main(String[] args) {
Data d =new Data();
d.x=10;
System.out.println("main() : x = "+d.x);
change(d);
System.out.println("After change(d) : x = "+d.x);
}
static void change(Data d){
d.x=1000;
System.out.println("change() : x="+d.x);
}
}
출력결과
main() : x = 10
change() : x=1000
After change(d) : x = 1000
- change메서드가 호출되면서 참조변수 d의 값(주소)이 매개변수 d에 복사됨
- change메서드에서 매개변수 d로 x의 을 1000으로 변경
- change메서드가 종료되면서 매개변수 d는 스택에서 제거
재귀호출
1. 메서드의 내부에서 자기자신을 호출하는 것
2. 조건문 필수
3. 반복문보다 수행시간이 더 걸리지만 논리적 간결함이 필요할때 사용됨(ex.팩토리얼)
public class Factorial {
public static void main(String[] args) {
int result=fac(4);
System.out.println("F(4)="+result);
}
static int fac(int n){
if(n==1){
return 1;
}
return n*fac(n-1);//메서드 fac()를 다시 호출함
}
}
출력결과
F(4)=24
- 클래스 메서드와 인스턴스 메서드
클래스멤버가 인스턴스 멤버를 참조, 호출하고자 하는 경우에는 인스턴스를 생성해야함
public class Math {
int a,b;
//인스턴스
int add(){return a+b;}
int minus(){return a-b;}
//클래스
static int add(int a,int b){return a+b;}
static int minus(int a,int b){return a-b;}
}
class MathTest{
public static void main(String[] args) {
//인스턴스메서드, 객체 생성 후에 호출 가능
Math mm=new Math();
mm.a=8;
mm.b=3;
System.out.println(mm.add());
System.out.println(mm.minus());
//클래스메서드, 인스턴스 생성없이 호출 가능
System.out.println(Math.add(8,3));
System.out.println(Math.minus(8,3));
}
}
출력결과
11
5
11
5
✔️ 오버로딩
오버로딩 : 한 클래스 내에 같은 이름의 메서들르 여러개 정의하는 것
오버로딩의 조건
- 메서드의 이름이 같아야 한다.
- 매개변수 개수 또는 타입이 달라야한다.
잘못된 오버로딩
int add(int a, int b){return a+b;}
int add(int x, int y){return x+y;}
위와같은 코드는 매개변수 이름만 다를 뿐 타입이 같으므로 오버로딩이라 할 수 없다.
올바른 오버로딩
int add(int a, int b){return a+b;}
long add(long x, long y){return x+y;}
매개변수의 이름만 같고 타입이 다르니 오버로딩의 조건에 성립한다.
✔️ 생성자
생성자 : 인스턴스 초기화 메서드
생성자 조건
- 클래스 이름과 동일해야한다.
- 리턴 값이 없다.
class Car {
String color;
String type;
int door;
Car() {
} //기본 생성자
Car(String color, String type, int door) { //매개변수가 있는 생성자
color = c;
type = t;
door = d;
}
}
class CarTest{
public static void main(String[]args){
Car c1 =new Car();
c1.color = "white";
c1.type = "auto";
c1.door = 4;
Car c2 = new Car("white","auto",4);
}
}
this : 인스턴스 자신을 가리키는 참조변수, 인스턴스 주소가 저장됨
this() : 생성자, 같은 클래스의 달느 생성자를 호출할 때ㅐ 사용
Car(String color, String type, int door) {
this.color = color;
this.type = type;
this.door = door;
}
- this.color = 인스턴스변수
- color = 생성자의 매개변수로 정의된 지역변수
728x90
'자바' 카테고리의 다른 글
[자바의 정석] - 12. 지네릭스, 열거형, 애너테이션 (0) | 2023.05.22 |
---|---|
[자바의 정석] - 11. 컬렉션 프레임 (0) | 2023.05.15 |
[자바의 정석] - 8. 예외처리 (1) | 2023.05.08 |
[자바의 정석 ] - 7장. 객체지향 프로그래밍Ⅱ (0) | 2023.04.25 |
[JAVA] - 상속 (0) | 2023.04.18 |