객체지향 프로그래밍의 특징
캡슐화 : 각각의 필요한 기능 구현하고 뭉쳐서 새로운 기능 구현
상속
다향성 : 하나의 매서드 이름이 다양한 객체에서 다르게 동작 할 수 있게(오버로딩, 오버라이딩)
추상화 : 복잡한 기능 단순화(세부구현 감추고 개념 구현 집중) -> 추상클래스
객체 : 데이터와 메서드를 가지며 실제 세계의 개체나 개념을 모델링
객체(붕어빵): 클래스의 인스턴스( 클래스의 실체화된 형태), 각 객체는 독립적인 상태를 가지고 있다.
클래스(붕어빵 틀) -> 객체를 만들기 위해서 존재할뿐
구조체와의 차이점: 구조체는 선언하면서 바로 변수가 될 수 있지만 클래스는 객체화를 진행하고 연결해줘야만 함
구조체는 값형식이고 스택에 할당
클래스는 참조 형식이고 힙에 할당되고 참조로 전달
구조체는 작은 크기의 데이터에 클래스는 더 복잡한 객체를 표현하기 위해서 사용!
Player player = new Player();
접근 제한자: public, private, protected
필드: 클래스 내부에 선언된 변수
매서드 : 클래스 내부에 선언된 함수
<생성자 기초>
입력하는 코드까지 만들고 싶으면 디폴트 생성자 까지 만들어 줘야 한다!
public class Solution
{
public int solution(string s)
{
int answer = int.Parse(s);
return answer;
}
}
public class Solution {
public long solution(long n) {
long answer = 0;
for(long i=1; i<=n; i++)
{
if(i*i==n)
{
answer =(i+1)*(i+1);
break;
}
else if(i*i>=n)
{
answer= -1;
break;
}
}
return answer;
}
}
-다른 사람의 풀이-
using System;
public class Solution
{
public long solution(long n)
{
long sqrt = (long)Math.Sqrt(n);
long answer = 0;
if(n == sqrt*sqrt)
answer = (sqrt+1)*(sqrt+1);
else
answer = -1;
return answer;
}
}
나는 for문과 if 문을 이용해서 값을 일일이 대입해가며 확인해보는 방식을 이용하였지만
다른사람의 풀이를 보니 Math.Sqrt() 매서드를 이용해서 제곱근을 구할수 있다는 사실을 새롭게 알게 되었다.
ex) var sqrt_test = Math.Sqrt(9);
-> sqrt_test 변수의 값은 3이된다.
Math.Sqrt(n) 의 값이 정수가 아닐 수도 있으니 (long)으로 형변환 까지 하기!!
-내 풀이-
using System;
public class Solution
{
public long solution(long n)
{
long answer = 0;
string digitNumber = "";
string number = n.ToString();
char[] digit = number.ToCharArray();
Array.Sort(digit);
Array.Reverse(digit);
for(int i = 0; i < digit.Length; i++)
{
digitNumber += digit[i];
}
answer = long.Parse(digitNumber);
return answer;
}
}
-다른사람의 풀이-
using System;
public class Solution {
public long solution(long n) {
long answer = 0;
// n을 곧장 char형태로 변환해서 새로운 char 배열에 저장함
char[] temp = n.ToString().ToCharArray();
// 배열을 오름차순으로 정렬함
Array.Sort(temp);
// 배열을 뒤집는다 = 내림차순으로 바뀜
Array.Reverse(temp);
// temp배열을 문자열로 만든뒤에 long형태로 변환한다.
// long이므로 ToInt32가 아니라 64다. 헷갈린다면 그냥 long.Parse를 쓰자.
answer = Convert.ToInt64(new string(temp));
// 정답을 리턴함
return answer;
}
}
나는 일일이 반복문을 사용해서 문자 배열을 문자열로 합쳐주었는데 문자 배열을 문자열로 바꾸는 new string() 이라는 방법이 있다는 사실을 새롭게 알게 되었다.