728x90

 

1.메소드

 

2.클래스 소속 메소드 a,b,c,d

 

3.인스턴스 소속 메소드 a,b,c,d

 

 

1.메소드

 

 

 

 

2.클래스 소속 메소드 a,b,c,d

 

 

3.인스턴스 소속 메소드 a,b,c,d

 

 

728x90
반응형
728x90

728x90
반응형
728x90

 

JAVA method - 8. 부록 - Access level modifiers

Access level modifiers : 외부에서의 접근권한 설정

 

메소드가 많아지면, 서로 연관된 메소드를 그루핑하기 위해 클래스를 만들게 된다

만든 클래스에 연관 메소드를 안에 넣어둠

 

public 자리에 올 수 있는 다른 명령어들 : 외부에서 접근하는 레벨을 지정하는 부분

public, protected, default(생략), private(같은 클래스 안에서만 작동하게하는 기능)

 - 위의 명령어가 무엇이든 다 동작하기는 한다

 

 

아래는 public과 private의 설정 차이이다

Greeting.hi();에서 위의 클래스 Greeting 안에 hi메소드가 public이면 작동. private면 미작동 에러

class Greeting{
	**public** static void hi() { 
//	private static void hi() {
		System.out.println("Hi");
	}
}

public class method08 {
	public static void main(String[] args) {

		**Greeting**.hi(); // 위의 hi메소드가 public이면 작동. private면 미작동 에러
	}
}

 

public과 private의 예

스마트폰 안에 오만가지 선들이 있는데 이것을 사용자가 만지면 안되고 알 필요도 없음 반대로 사용자가 컨트롤 해야할 볼륨키, 전원키 등은 외부로 나와줘야한다

  • public : 외부로 노출되어 있는 버튼들(유저가 사용가능)
  • private : 내부 선들(유저 사용불가)

 

 

전체코드

// JAVA method - 8. 부록 - Access level modifiers
//
// Access level modifiers : 외부에서의 접근권한 설정

class Greeting{
	public static void hi() {
//	private static void hi() {
		System.out.println("Hi");
	}
}
public class method08 {
	public static void main(String[] args) {
	// public 자리에 올 수 있는 다른 명령어들 : 외부에서 접근하는 레벨을 지정하는 부분
	// public, protected, default(생략), private(같은 클래스 안에서만 작동하게하는 기능)
	// 위의 명령어가 무엇이든 다 동작하기는 한다
		
		Greeting.hi(); // 위의 hi메소드가 public이면 작동. private면 미작동 에러
		
		// protected & default는 경제적이지 않음
		
		// public과 private의 예
		// 스마트폰 안에 오만가지 선들이 있는데 이것을 사용자가 만지면 안되고 알 필요도 없음
		// 반대로 사용자가 컨트롤 해야할 볼륨키, 전원키 등은 외부로 나와줘야한다
		// public : 외부로 노출되어 있는 버튼들(유저가 사용가능)
		// private : 내부 선들(유저 사용불가)
	}
}
728x90
반응형
728x90

JAVA method - 6. 메소드의 활용

 

메소드 사용의 장점

1.코드의 가독성↑

 - 1억줄의 코드에서 수많은 로직이 얽힌 코드를 이해해야할 때...?

2.재사용 용이 : 호출만 하면 됨

3.유지보수 관리 용이

 

public class method06 {
	public static void main(String[] args) {
	
			double valueOfSupply = 10000.0;
			double vatRate = 0.1;
			double vat = valueOfSupply * vatRate;
			double total = valueOfSupply * vat;

			System.out.println("Value of supply : " + valueOfSupply);
			System.out.println("VAT : " + vat);
			System.out.println("Total : " + total);
	}
}

메소드를 사용해 위의 코드를 아래의 코드처럼 간결하고 유지보지가 용이하게 바꿔보자

public class method06 {
	public static double valueOfSupply = 10000.0; // 공급가액
	public static double vatRate = 0.1;           // 부가가치 세율
	// public static이라 붙이는 의미 : 위의 method06 클래스의 직접적인 소속이라는 것

	public static double getVAT() {
		return valueOfSupply * vatRate;
	}
	public static double getTotal() {
		return valueOfSupply + getVAT();
	}
	
	public static void main(String[] args) {
	
		
	// 지역변수
//	double vat = valueOfSupply * vatRate;  // 부가세
	double vat = getVAT(); // 위와 같은 코드. get메소드 get변수명의 변수값을 가져온다
//	double total = valueOfSupply + vat;    // 합계
	double total = getTotal();
	
	
	System.out.println("Value of supply : " + valueOfSupply);
	System.out.println("VAT : " + vat);
	System.out.println("Total : " + total);

	// 메소드 사용의 장점
	// 1.코드의 가독성↑
	// 2.재사용 용이 : 호출만 하면 됨
	// 3.유지보수 관리 용이
	}
}

반복되는 코드들을 메소드화해서 메인메서드 밖에서 만들고, 지역변수를 전역변수화해서 이 클래스 안 전체에서 사용 가능케 전환

 

  • public static 붙이는 의미 : 위의 method06 클래스의 직접적인 소속이라는 것
  • get메소드 : get변수명의 변수값을 가져온다

 

 

 


 

 

JAVA method - 7. 수업을 마치며

메소드는 서로 연관된 명령을 그루핑해서 이름을 붙인 것

클래스는 서로 연관된 메소드와 변수를 그루핑해서 이름을 붙인 것

 

클래스(class)

많은 컴퓨터 언어들이 클래스의 개념을 갖고있지 않거나 처음에는 없다가 나중에 추가된 경우가 많다

메소드만으로도 할 수 있는 것이 많고, 충분히 혁명적

 

객체지향 프로그래밍(Object Oriented Programming, OOP)

서로 연관된 메소드와 변수를 그루핑해서 이름을 붙인 것이 클래스

이 클래스를 복제해서 서로 다른 내부상태를 가지고 있는 복제본들을 인스턴스

 

class & instance & object

클래스와 인스턴스를 우선 객체라고 생각해도 좋다

객체를 뼈대로 하는 프로그램을 만들어가는 프로그래밍 방법론을 객체지향 프로그래밍이라고 한다

 

많은 컴퓨터언어와 소프트웨어 객체지향 프로그래밍에 따라서 만들어지고 있다.

또한 남들이 만든 라이브러리가 OOP 방법에 따라 만들어져 있을 수도 있다

객체지향은 입문자가 중급자가 되는 길목에 있는 개념이라고 할 수 있다

코드의 양이 많아지고 남들과 공유해야할 일이 많아지고 있다면 객체지향을 공부할 시기

 

728x90
반응형
728x90

 

JAVA method - 4. 메소드의 입력

 

단순 반복만 대체가 아닌 함수 괄호 안에 입력값에 따라 메소드가 다르게 작동하게 하는 방법?

 - 해당 메소드 안 println() 안에 변수명으로 바꿔주면, 밖에서 해당 메소드 호출하고 ()안에 입력되는 값에 따라 출력된다

 - 아래 코드표 참조

 

메인 메소드 main(String[] args) {의 디테일한 의미

main이라는 메소드 있어야 자바가 프로그램을 호출한다는 약속

String뒤에 []는 문자열 배열

args는 자바가 메인메소드를 실행할 때, 입력해주는 입력값이 args를 통해서 들어가게됨

 

 

public static void printTwoTimes(String text) { 이 코드를 자바가 어떻게 받아들일까?

- printTwoTimes라는 메소드를 정의하고 있고, 이 메소드 ()안에 들어온 첫번째 값은 반드시 String타입으로 받으며, {}안에서 text라는 변수의 값이 되겠구나라고 생각한다

- 이 메소드 밖에서 printTwoTimes 메소드를 호출하면 printTwoTimes()안에 첫째값을 "a"이구나 그럼 자바는 text 값은 {}안에서 "a"이구나라고 생각

- printTwoTimes메소드 안에 "a”를 변수명 text로 변경하면, 메소드 데이터를 추가해야할 것을 더이상 수정할 필요가 없게됨

- 메소드명(데이터타입 변수명) {메소드 작동내용}

 

만약 위의 구분표시----를 다른걸로 메소드처럼 일괄 변환하고 싶다면?(두번째 변수 추가)

public static void printTwoTimes2(String text, String delimiter) {처럼 두번째 파라미터 추가와 메소드 밖에서 호출할 메소드 ()에도 인자를 추가해주면 된다

// delimiter 매개변수를 추가함
public static void printTwoTimes2(String text, String delimiter) {
		System.out.println(delimiter); // delimiter 구분자라는 의미
		System.out.println(text);	
		System.out.println(text);

 

 

  • 매개변수(parameter) : 아래 새로 만든 메소드 안에 변수명을 매개변수한다
  • 메소드 밖에서 메소드를 사용하는 쪽으로 주입한 값을 메소드 안으로 흘려보내주는 매개자라고 해서 매개변수
  • 인자(arguement) : 해당 메소드 밖에서 호출하는 메소드명 ()안에 입력값을 인자라 한다

 

 

public class method04 {

	public static void main(String[] args) { // main이라는 메소드 있어야 자바가 프로그램을 호출한다는 약속
// String뒤에 []는 문자열 배열. args는 자바가 메인메소드를 실행할 때, 입력해주는 입력값이 args를 통해서 들어가게됨
		printTwoTimes("a");	
		// 1억번 코드 반복
		printTwoTimes("b");	
		// 1억번 코드 반복
		
		
		printTwoTimes2("a","----");	// delimiter(구분자) 적용 메소드 호출
		printTwoTimes2("a","****");	
		printTwoTimes2("b","%%%%");	
		printTwoTimes2("b","!!!!");	
								// 위의 함수 안에 입력 된 값을 인자(argument) 
	}
								// 아래 text, delimiter와 같은 변수를 파라미터(parameter)라고 부름. 
								// 메소드 밖에서 메소드를 사용하는 쪽으로 주입한 값을 메소드 안으로 흘려보내주는 매개자라고 해서 매개변수
	public static void printTwoTimes(String text) {// 이 코드를 자바가 어떻게 받아들일까? 
		System.out.println("----");		 // printTwoTimes라는 메소드를 정의하고 있고
		System.out.println("a");		 // 이 메소드 ()안에 들어온 첫번째 값은 반드시 String타입으로 받으며
		System.out.println(text);		 // {}안에서 text라는 변수의 값이 되겠구나라고 생각한다
	}									 // 메소드명(데이터타입 변수명) {메소드 작동내용}
	// 이 메소드 밖에서 printTwoTimes 메소드를 호출하면 printTwoTimes()안에 첫째값을 "a"이구나 
	// 그럼 자바는 text 값은 {}안에서 "a"이구나라고 생각
	
	// printTwoTimes메소드 안에 "a'를 변수명 text로 변경하면, 추가되거나 수정할 메소드 데이터를 더이상 할 필요가 없게됨

	// 만약 위의 구분표시----를 다른걸로 메소드처럼 일괄 변환하고 싶다면?
	public static void printTwoTimes2(String text, String delimiter) {
		System.out.println(delimiter); // delimiter 구분자라는 의미
		System.out.println(text);	     // 
		System.out.println(text);
	}

}

 

 

728x90
반응형
728x90

출처: <https://www.youtube.com/watch?v=sQEmlaNXJZk&list=PLuHgQVnccGMDkdt3N9tT0aZPZx5-Ri2jo&index=1>

 

JAVA method - 1. 수업소개

코드의 양이 많아지면 정리하고 싶게 될 것인데, 연관된 코드를 모아서 그루핑(grouping)하고 이름을 붙이면 이것이 함수(function)이고 자바에서는 메소드라고 부름

이미 만들어 놓은 메소드를 사용해서 똑같은 코드를 다시 작성할 필요 없이 재사용 가능

 

 


 

JAVA method - 2. 이미 익숙한 메소드

메인 메소드를 쓰면서 이미 메소드를 사용해옴

main도 메인이라는 메소드. 처음부터 끝까지 하나의 메소드

println()도 입력값을 모니터로 출력하는 메소드

math.floor(1.1)); // 내림 메소드. 1.1을 1.0으로

 


 

JAVA method - 3. 메소드의 기본 형식

반복되는 1억줄의 코드를 하나씩 변경해야한다면?

연관된 코드를 그루핑해서 이름을 붙이자(메소드 작성)

아래처럼 반복되는 코드를 따로 메소드를 만들어서 관리(수정)할 때도 편하고 코드도 줄어들어서 필히 사용해야할 기능

 

 

public static void printTwoTimesA() {

이 줄을 보고 자바는 이런 메소드 있고 이런 내용을 가졌구나 하고 기억해둠

 

 

System.out.println("A"); // 둘이 같은 코드

printTwoTimesA();
  • 여기서 코드수정시 이 메소드를 쓴 모든 코드에 적용되어 엄청난 생산성업

 

 

 

public class method010203 {
	public static void printTwoTimesA() {// 이 줄울 보고 자바는 이런 메소드 있고 이런 내용을 가졌구나
		System.out.println("-");		 // 하고 기억해둠
		System.out.println("A");		 // 여기서 코드수정시 이 메소드를 쓴 모든 코드에 적용되어 엄청난 생산성업
		System.out.println("A");
	}
	public static void main(String[] args) { // 여기 main도 메인이라는 메소드. 처음부터 끝까지
		System.out.println("hello"); // println도 입력값을 모니터로 출력해주는 메소드
		System.out.println(Math.floor(1.1)); // 내림 메소드. 1.1을 1.0으로
		
	
		// 1억번 반복
		printTwoTimesA();
//		// 1억번 반복
//		System.out.println("-");
//		System.out.println("A");
//		System.out.println("A");
//		// 1억번 반복
//		System.out.println("-");
//		System.out.println("A");
//		System.out.println("A"); // 이 반복되는 코드들을 위에 만들어둔 메소드 printTwoTimesA로 변경
		// 1억번 반복				 // 같은 일하게 된다
		printTwoTimesA();		
		// 1억번 반복
		printTwoTimesA();
		
		// 이클립스 refactoring 기능
		// 매소드로 만들기를 원하는 부분을 드래그 범위 지정-우클릭 refactoring 클릭-우측 extract method 클릭
		// 프리뷰 기능을 이용하여 어찌 바뀔껀지 미리 확인가능
	}

}

 

 

※ 이클립스 리팩토링refactoring : 메소드화 기능

이클립스 refactoring기능을 이용하면 해당 부분을 쉽게 메소드화 가능하다

[메소드로 만들기를 원하는 부분을 드래그 범위 지정] - [우클릭 refactoring 클릭] - [우측 extract method 클릭]

 

 - 프리뷰 기능을 이용하여 어찌 바뀔껀지 미리 확인가능

728x90
반응형
728x90

 

JAVA1 - 14.9. 나의 만들기 - 메소드(Method)

 

만약 아래의 변수에 들어가는 식이 엄청나게 복잡하다면….?

복잡한 식들을 getVAT()같은 이름으로 바꾸고 복잡한 식들을 숨겨놓은다면 앱이 심플해질

 

double valueOfSupply = Double.parseDouble(arg[0]);
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply * vatRate;
double total = valueOfSupply + vat;
double expense = valueOfSupply * expenseRate;
double income = valueOfSupply - expense;

double dividend1 = income * 0.5;
double dividend2 = income * 0.3;
double dividend3 = income * 0.2;

 

 

이클립스 Refactor - 메소드로 변경 기능

[바꾸기를 원하는 코드 선택 우클릭 Refactor ] - [Extract Method]

메소드 이름을 getVAT 이름 지었고 아래에 private static… return 문장이 새로생겼다

 

 

 

메소드 작동 메커니즘

1 변수valueOfSupply 값인 10000.0 2 getVAT valueOfSupply 넣어짐

2번의 2번을 거친 valueOfSupply 다시 메소드로 만들어진 3번의 getVAT valueOfSupply 값이 넣어지고

4번은 메소드를 만드는 코드. 메소드에서 최종 계산된 값이 return코드를 통해 2getVAT 들어간다.

* 메소드를 통해 1억줄의 코드도 간단하게 해결가능

 

 

코드를 깔끔하게 하고자 getVAT() 안에 값을 지운다면?

위의 valueOfSupply있어서 같은데 에러가난다 why?

valueOfSupply 현재 main {} 안에서 선언됬기 때문

, main메소드 안에서만 작동하는 지역변수(local variable)

 - 해결 : 모든 매소드에서 접근할 있도록, main메소드 밖에서 선언해줄

 

 

 

이클립스 Refactor - 지역변수→전역변수 변경 기능

[바꾸기를 원하는 코드 위에서 좌클릭하고 우클릭 Refactor] - [Convert Local Variable to Field]

 

변수의 식마다 메소드 설정 & 지역변수 to 전역변수로 변경

프린트코드는 한번에 지정해서 메소드설정

*자바에서는 전역변수(Global Variable)를 필드(Field)라고함

 

 

메소드(Method)란?

서로 연관된 코드 모아서 다시말해서 그루핑(grouping)해서 이름을 붙인 정리정돈의 상자

 

 


 

JAVA1 - 14.10. 나의 만들기 - 클래스(Class)

 

많은 라이브러리들이 객체지향 방법으로 만들어졌기에 객체지향이 대강 뭔지는 알아둘 필요가 있다

객체는 클래스라는 표현을 쓰기도 (완전히 동일한건x)

 

클래스(Class)란?

서로 연관된 메소드와 변수를 그루핑(grouping) . 그리고 거기에 naming .

정리정돈의 상자이다

 

앱에 여러가지 기능들이 많이 붙고

변수와 메소드가 앱에 너무 많으면 햇갈리고 생산성이 많이 떨어지게 된다

이런 상황에서 도움이 되는 것이 바로 클래스(class)

컴퓨터로 치면 디렉토리로 파일 정리하는 격

 

 

클래스(Class) 써서 정리하기

1)전역변수 세개를 Class Accounting 안으로 이동

(public static double valueOfSupply, vatRate, expenseRate;)

2)밑에 모여있는 메소드들도 Class Accounting 안으로 이동

 - 혹시 앞에 public 아니라 private이라면 public으로

3)public static void main(String[] args) { 아래 valueOfSupply,vatRate, expenseRate,print 4개의 변수명 앞에

클래스명인 Accounting. 붙여주면 전과 같은 기능으로 작동

 

 

*나중에 public private 차이 알아보자

 


 

JAVA1 - 14.11. 나의 만들기 - 인스턴스(Instance)

 

인스턴스(Instance)는

하나의 클래스를 복제해서 서로 다른 데이터의 값과 서로 같은 메소드를 가진 복제본을 만드는 이다

 

 

메인메소드 안에

Accounting.valueOfSupply = 10000.0;
Accounting.vatRate = 0.1;
Accounting.expenseRate = 0.3;
Accounting.print();

이런 물건들이 몇천개 있다고 , 어쩌다가 새상품이 하나 들어왔다고 해보자

위의 4개코드의 과정을 새상품이 들어올 때마다 세팅해줘야한다

ex)

Accounting.valueOfSupply = 10000.0;
Accounting.vatRate = 0.1;
Accounting.expenseRate = 0.3;
Accounting.print();

Accounting.valueOfSupply = 20000.0;
Accounting.vatRate = 0.05;
Accounting.expenseRate = 0.2;
Accounting.print();

   . 
   .
   .

이런 과정이 여러번 반복되다보면

클래스의 내부적인 상태를 바꾸는 행위가 버그를 유발할 가능성이 굉장히 높다

 

프로그래밍을 잘하는 사람이라면 이렇게 바꿀

Accounting class 이름을 Accounting1으로 변경하고 카피해서 Accounting2,3,4 계속 만들고

아래와 같이 클래스별로 따로 값을 관리한다

# main{} 안에 있는

Accounting1.valueOfSupply = 10000.0;
Accounting1.vatRate = 0.1;
Accounting1.expenseRate = 0.3;
Accounting1.print();

Accounting2.valueOfSupply = 20000.0;
Accounting2.vatRate = 0.5;
Accounting2.expenseRate = 0.2;
Accounting2.print();

클래스를 복제해서 서로 다른 상태, 서로 같은 메소드를 갖도록

하나의 클래스를 돌려막기한 것이 아니라, 복제된 클래스를 이용해서 편리하고 버그가 적은

코딩을 있게

 

그런데 이것도 좋지만 클래스의 정보를 바꿀려면 만든 모든 클래스의 정보를 바꿔줘야하기에

많이 번거로워질 (클래스를 생성할 때마다, 정보를 일일히 추가해줘야함…)

자바를 만든 사람들은 클래스라는 것을 복제할 있는 기능 만들었다

 

Accounting 앞에 new 붙여 복제

new Accounting();

Accounting a1 = new Accounting();

변수a1 앞에 Accounting 붙여서 a1변수값에는 반드시 Accounting 복제본만 들어올 있다라고 명시를 해줌

Accounting a1 = new Accounting();
a1.valueOfSupply = 10000.0;
a1.vatRate = 0.1;
a1.expenseRate = 0.3;
a1.print();

Accounting a2 = new Accounting();
a2.valueOfSupply = 50000.0;
a2.vatRate = 0.5;
a2.expenseRate = 0.5;
a2.print();

이렇게 복제가 가능하고, 여기서 다시 a1.print(); 해도 정상적으로 작동함

클래스를 복제하지 않아도 된다

 

인스턴스(Instance)란?

class 앞에 new 붙여서 만들어진 무언가 인스턴스

 

*인스턴스를 썼으면 위에 class Accounting에서 public 다음 static 사용되면 안되기에 지워야함

 

 

※ 자바에서는 메소드로 구조를 잡고

메소드와 변수를 grouping해서 클래스로 구조를 잡고

클래스를 복제한 인스턴스를 통해서 다른 구조를 만드는 구조가 자바와 다른 컴퓨터 언어들의 특징

 

 

 

728x90
반응형
728x90

 

 

JAVA1 - 13.1. 자바 문서 보는 법 - API vs UI

 

자바가 기본으로적으로 내장하는 기능들을 '기본 라이브러리' 부름

  ex)System, Date, Math, PrintWriter

 

라이브러리라는 부품을 이용해서 나의 프로그램을 만드는

 

API(Application Programming Interface)

 여기서

Programming 시간에 따라서 실행된다는 시간이 강조된 표현이고,

Application 자바가 기본적으로 제공하는 부품들을 응용(application)해서 만든다라고 하는 응용에 방점이 찍힌 표현.  자바를 응용해서 프로그래밍적으로 실행되는 프로그램을 만들기 위해서 사용해야되는 조작장치들, 조작방법을 API(Application Programming Interface)라고 부른다

 

 

사람이 우리가 만든 프로그램을 조작하기 위해서 조작장치들(web이면 link, desktop app이면 button, 커맨드라인 시스템이면 argument ) UI(User Interface)라고 부름

 

 

동시에 사람이 사용하지 않을 도 있다. 우리가 만든 프로그램이 사람이 아닌 부품으로써 프로그램이 사용할 경우.

우리의 프로그램이 우리의 프로그램을 사용하는 완제품에 해당되는 프로그램에게 API 제공해야한다. 완제품에 해당하는 프로그램도 다른 프로그램의 부품이   있으니 API 해야한다

 

 

 


 

 

JAVA1 - 13.2. 자바 문서 보는 법 - 패키지,클래스,변수,메소드

API의 사용방법을 스스로 알아낼 수 있는 방법을 배워보자

 

 

All Classes탭

일단 클래스는 하나의 프로그램이라고 생각해둬라

수학과 관련된 작업을 해야하는데 직접 만들기 싫다면 API문서에서 검색

Math 검색 - All classes에서 Math 클릭

 

 

 

 

패키지(Package)

정리정돈을 위한 도구

많은 클래스들 있고 이들의 이름이 겹치면 충돌

만약 내가 똑같은 math라는 이름의 클래스를 만들고 싶으면 충돌하기에 있을 수가 없으니 이런 문제를 해결하기 위한 도구가 패키지

위는 java.lang 속한 math클래스고 내가 다른 패키지 이름으로 math라는 클래스를 만들 수도 있는

 java.lang 안에는 Math 외에도 String, System,Thread,float 등등 있다

 

 위의 class math에서 java.lang패키지를 좌측상단 package란에서 찾아보면 있는 것을 있다

패키지는 비슷한 성격의 클래스들을 모아서 이름을 붙인다

 

 

클래스(Class)?

서로 연관된 변수와 메소드를 모아서 거기에 이름을 붙인

class Math 안에 abs, min, max, floor, ceil 등의 메소드가 여기에 속함

패키지와 클래스, 메소드,변수의 상관관계도

 

 

728x90
반응형
728x90

[자바의 정석 - 기초편] ch1-8,9 첫 번째 자바프로그램 작성

 

1.javac.exe : 자바 컴파일러

사람이 작성한 문장을 기계어로 번역

소스파일(*.java) 클래스파일(*.class) 변환

 

2.java.exe : 자바 인터프리터

자바 프로그램(클래스 파일) 실행

 

3.클래스(class) : 자바 프로그램의 단위

자바 프로그램은 클래스들로 구성됨

{ 열고 } 닫아서 클래스의 첫과 끝을 구분해준다.

모든 문장은 {}안에 있어야함

 

ex)

class 클래스이름 {

내용

}

 

 

 

4.main메서드 : 자바 프로그램의 시작점

메서드 없이는 실행불가

메인 메서드를 찾아서 문장의 첫번째부터 실행함

 

ex)

class 클래스이름 {

public static void main(String[] args) {main메서드의 시작

} main메서드의

}

 

 

 

 

 

728x90
반응형
728x90

007. str과 repr 차이

 

 

 

여러 자료 찾아보다가 그나마 이해가 잘되는 분의 글을 기억할려고 캡쳐해뒀는데 누구인지까지 캡쳐가 안되서 작성자분 보시면 양해부탁드립니다ㅠㅜ

 

__str__과 __repr__

배우던 도중 퀘스쳔 마크가 뜬 것과 위의 둘이 관련이 있어서 찾아찾아보게되었다

사실 이 글을 쓰는 지금도 정확히 파이썬에서 어떻게 어우려서 작동하는지 완전히 이해하지 못했다

앞으로도 계속 배울꺼지만 일단 잊지않게 복습해둔다

 

간단하게 둘은 메소드(method)이며,

__str__ : 사람이 보기(인식) 쉽게 출력하는 방법 // 객체의 비공식적 문자열 출력

__repr__ : 컴퓨터가 인식할 수 있게 출력하는 방법 // 객체의 공식적 문자열 출력

 

주피터를 쓰면서 변수명을 그냥 적으면 print()를 쓰지 않아도 결과값이 출력이 되는데

위의 이미지처럼 결과 값이 다르다

그래서 다시 한번 관심을 갖게 되었는데 이번에 새로 알게 된 것은, 

 

변수명만 선언한 것이 __repr__이고, 주피터에서 자동으로 이렇게 한다고 한다.

print() 함수를 사용한게 __str__이다.

 

 

 

 

datetime 모듈을 써보다가 __repr__ 과 __str__의 출력 차이가 모듈에서 이렇게 날 줄 몰랐다...ㄷㄷ

차차 더 깊은 이해를 위해 나올 때마다 찾아보고 물어봐야겠다

아직은 찾아보다가 이해도 다 안되고 번아웃 될 것 같아서 패스

 

*프로그램에서 편의를 위해 자동적으로 이것저것 해주는 것만큼 왜 그런지 작동 원리를 알고,

더 내 수족처럼 사용할 수 있게 정진해야겠다!!!

 

728x90
반응형

+ Recent posts