
클래스
-클래스: 사용자 정의 자료형(일반적으로 대문자로 시작)
-인스턴스(객체): 클래스를 변수로 만든 것
-생성자: 인스턴스를 만들 때 사용하는 클래스와 이름이 같은 메서드
-클래스 멤버: 클래스에 속한 멤버(클래스 이름 뒤에 점을 찍고 사용하는 멤버들)
-인스턴스 멤버: 인스턴스에 속한 멤버(인스턴스 이름 뒤에 점을 찍고 사용하는 멤버들)
class Program
{
class Product
{
public string name = "default";// [접근 제한자] [자료형] [변수이름] = 초기화
public int price = 0; // [접근 제한자] [자료형] [변수이름] = 초기화
}
static void Main(string[] args) // [접근 제한자] [static] [반환형] [메서드 이름]([매개변수])
{
Product product = new Product(); // [클래스] [인스턴스] = [키워드] [생성자]
product.name = "감자"; // 인스턴스 변수 변경
product.price = 2000; // 인스턴스 변수 변경
Product productA = new Product() { name = "고구마", price = 3000 }; // 초기화
Console.WriteLine($"{product.name}: {product.price}원"); // 출력
Console.WriteLine($"{productA.name}: {productA.price}원"); // 출력
}
}

클래스 내에서 어떤 함수나 블럭{} 안에 있는 변수를 지역변수, 그렇지 않은 변수를 전역변수
전역변수는 클래스 내 어디서든 사용될 수 있고, 지역변수는 해당 변수가 선언된 함수나 블럭 안에서만 사용할 수 있다.
-전역변수: num
-지역변수: a
public, private를 주로 사용
-public : public 접근 제한자가 걸린 변수 또는 메서드는 모든 곳에서 접근 가능
-private : 접근 제한자를 입력하지 않으면 자동으로 private 접근 제한자로 설정,
private 접근 제한자가 적용되면 자신의 클래스 내부에서만 해당 메서드를 사용 가능
-protected : 해당 변수가 선언된 클래스와 그 클래스를 상속받는 또 다른 클래스에서만 사용 가능
public: 같은 패키지 및 다른 패키지 모두 접근이 가능한,
코드를 실행하면 메소드와 클래스들을 호출하게 되는데 다른 클래스와 메소드 등에서 main의 접근을 막으면 안됨
static: 정적 메모리로 프로그램이 실행 시 메모리에 할당된,
기존의 객체의 경우 할당이 끝나면 메모리에서 사라지는 데 반해 static을 사용하면 프로그램이 종료될 때 까지 유지
void: return 타입이 없는, 프로그램의 시작과 끝으로 마무리 하는 데 누군가에게 따로 return을 할 일이 없음
main: 디버깅시 Entry Point (제일 먼저 시작하는 코드)
자바에서 모든 코드의 디버깅은 main에서 시작 - 끝을 이루게 된다.
String[]: String[] 배열을 나타냄
args: String[] 배열의 변수, 다른 값으로 써도 되지만 통상적으로 args 사용
프로그램의 실행 순간에 외부의 값을 가져와서
프로그램 내 사용하고자 할 때 메모리에 저장할 공간을 미리 선언해 두는 것