'필드를 사용한다' 라는 의미는 필드의 값을 변경하거나 읽는 것을 의미하며
필드는 객체를 생성한 후에 사용 할 수 있다.
Car car = new Car(); 로 객체를 생성 했다면, 참조변수 car를 이용하여
외부에서 객체 내부의 필드에 접근하여 사용할 수 있다.
객체 내부의 필드에 접근하는 방법은 도트(.) 연산자를 사용한다.
ex) car.color = "blue";
객체 내부 메서드에서도 내부 필드에 접근 할 수 있다.
코드 예시)
double brakePedal() {
speed = 0;
return speed;
}
이처럼 brakePedal() 메서드 내부에서 객체의 필드 speed를 바로 호출해서 사용이 가능하다.
'메서드를 호출한다' 라는 의미는 메서드의 블록 내부에 작성된 코드를 실행한다는 의미이다.
Car car = new Car();로 객체를 생성했을 때, 참조변수 car를 이용하여
외부에서 객체 내부의 메서드에 접근하여 호출할 수 있다.
이 때, 객체의 내부 메서드 접근 방법은 도트(.) 연산자를 사용한다.
예시) car.brakepedal();
또한, 메서드가 매개변수를 가지고 있다면 호출할 때 매개변수의 순서와 타입에 맞게
매개 값을 입력해야 한다.
예시) car.gasPedal(100, 'D');
객체 내부 메서드에서도 내부 메서드에 접근하여 호출할 수 있다.
코드 예시)
double gasPedal(double kmh, char type) {
changeGear(type);
speed = kmh;
return speed;
}
이처럼 gasPedal(double kmh, char type) 메서드 내부에서
해당 객체의 changeGear(type); 메서드를 호출할 수 있다.
오버로딩은 함수가 하나의 기능만을 구현하는 것이 아니라,
하나의 메서드 이름으로 여러 기능을 구현하도록 한다.
즉, 한 클래스 내에 이름이 같은 메서드가 있더라도 매개변수의 개수/타입/순서 등이 다르면
동일한 이름을 사용해서 메서드를 정의할 수 있다.
메서드의 이름이 같고, 매개변수의 개수/타입/순서가 달라야 한다.
오버로딩은 매개변수의 차이로만 구현할 수 있다.
1. 메서드 이름 하나로 상황에 따른 동작을 개별로 정의할 수 있다.
예를 들면, 메세지를 출력할때 쓰는 println()의 경우 출력의 기능은 같지만
매개변수로 int, double, String, boolean등 다양한 타입을 입력할 수 있다.
2. 메서드의 이름을 절약할 수 있다.
위에서 예시로 쓰였던 println()가 오버로딩이 되지 않았다면
타입이 다른 매개변수를 사용하고자 할 경우 printlnInt(), printlnDouble() 처럼
메서드명이 길어지고 낭비 되었을 것이다.
Java에서는 메서드를 호출할 때,
매개변수로 지정한 값을 메서드의 매개변수에 복사해서 넘겨준다.
이 때의 매개변수로는 두 가지 타입이 있는데
값을 읽기만 할 수 있는 기본형 매개변수와 값을 읽고, 변경할 수 있는 참조형 매개변수가 있다.
* 변수가 가지고 있는 값 자체를 매개변수로 전달한다.
- 기본적으로 정수, 실수, 불리언, 문자 등의 기본 데이터 타입들이 기본형 매개변수로 전달된다.
- 매개변수를 변경하더라도 원본 변수의 값은 변경되지 않는다.
* 매개변수로 변수의 참조(메모리 주소)를 전달한다.
- 주로 배열, 객체, 포인터 등의 데이터 타입들이 참조형 매개변수로 전달된다.
- 함수 내부에서 매개변수를 변경하면 원본 변수도 함께 변경된다.
알고리즘 문제 출처 : 프로그래머스 스쿨
1. 양꼬치
2. 피자-나눠먹기(1)
3. 피자-나눠먹기(3)
4. 점의-위치-구하기
5. 아이스-아메리카노
6. 옷가게-할인-받기
7. 제곱수-판별하기
class Solution {
public int solution(int n, int k) {
int answer = 0;
int drinkService = 0;
if ( (n > 0 && n < 10000 ) && (k >= n/10 && k < 10000) ) {
k -= n/10;
answer = (n * 12000) + (k * 2000);
return answer;
}
return answer;
}
}
class Solution {
public int solution(int n) {
int answer = 0;
if (n >= 1 && n <= 100 ) {
if (n % 7 == 0) {
answer = n/7;
return answer;
}
answer = (n/7) + 1;
return answer;
}
return answer;
}
}
class Solution {
public int solution(int slice, int n) {
int answer = 0;
if (n >= 1 && n <= 100 ) {
if (n % slice == 0) {
answer = n/slice;
return answer;
}
answer = (n/slice) + 1;
return answer;
}
return answer;
}
}
class Solution {
public int solution(int[] dot) {
int answer = 0;
int x = dot[0];
int y = dot[1];
if (x > 0) {
if (y > 0) {
answer = 1;
} else {
answer = 4;
}
} else if (x < 0) {
if (y > 0) {
answer = 2;
} else {
answer = 3;
}
}
return answer;
}
}
class Solution {
public int[] solution(int money) {
int[] answer = {0, 0};
int drinkPrice = 5500;
answer[0] = money / drinkPrice;
answer[1] = money % drinkPrice;
return answer;
}
}
class Solution {
public int solution(int price) {
int answer = 0;
if (price >= 500000) {
return (int)(price * 0.8);
} else if (price >= 300000) {
return (int)(price * 0.9);
} else if (price >= 100000) {
return (int)(price * 0.95);
}
return price;
}
}
class Solution {
public int solution(int n) {
int squareRoot = (int)Math.sqrt(n);
if (n == squareRoot * squareRoot) {
return 1;
}
return 2;
}
}
강의 듣는 것 보다 알고리즘에 손이 가기 시작했다.
이러면 안되는데..
문제 푸는게 너무 즐겁다.
어제보다 코드를 깔끔하게 써보려고 최대한 노력해봤는데
코드를 한 줄로 끝내버리는 삼항연산자의 달인들이나,
수학과인가 궁금한 수학으로 코드를 줄여버리는 마술사들이 있었다.
마지막 제곱수 판별하기에서 근호를 구하는 방법을 도저히 모르겠어서
제곱근 구하는 방법은 인터넷에서 검색해서 찾았다. (Math.sqrt() 사용)
오늘도 재밌었다!