728x90

 

메소드(method)

다른 프로그래밍 언어에는 함수라는 것이 별도로 존재한다. 하지만 자바는 클래스를 떠나 존재하는 것은 있을 수 없기 때문에 자바의 함수는 따로 존재하지 않고 클래스 내에 존재한다.

자바는 이러한 클래스 내의 함수를 메소드라고 부른다.

※ 보통 함수와 메소드가 공존하는 언어(예:파이썬)에서는 두 개를 구분하여 말하기도 하지만 자바는 보통 메소드와 함수를 구분하여 말하지 않는다. 다만 자바에서 사용되는 함수의 정확한 명칭은 메소드

위 내용의 출처 : 점프투자바

 

역할

입력을 가지고 어떤 일을 수행한 다음에 결과물을 내어놓는 것, 이것이 메소드가 하는 일

 

구조

입력값 -> 메소드 -> 리턴값

메소드는 들어온 입력값을 가지고 어떤 처리를 하여 적절한 리턴값을 돌려주는 블랙박스와 같다.

기능부분에 생성자도 있지만 메소드도 있다

 

 

메인메소드( main method)

메인메소드는 모든 형태를 다 가지고 있다

public static void main(String[] args) {
[접근제한자] [예약어] 반환타입 메소드명(매개변수) {

  - 생략가능 : 접근제한자 예약어 매개변수

 

  1. 접근 제한자
  2. 예약어
  3. 반환타입
  4. 매개변수
  5. 표현식 종류 4가지

 

접근제한자 : public private protected default

예약어 : static final 등

반환타입 :

     A. void : 반환할 게 없음. 반환값이 없다고해서 안쓰면 생성자처럼 됨. 필히 쓸 것

     B.기본자료형을 반환하는 메소드

           ex) Integer.parseInt, chataAt(), Math.random(), String.equals(),String.length() 등등

C.배열을 반환 : Arrays.copyOf()

D.클래스를 반환 : Scanner.nextLine() .nextInt 등등

메소드명

매개변수

 


1) 접근 제한자

 

2) 예약어

 

3) 메소드 반환형

 

4)메소드 매개변수

1.() : 매개변수 없음 = 전달할 값이 없음

2.기본자료형

3.배열 : 얇은 복사(주소값)

4.클래스

5.가변인자 : 매개변수의 개수가 정해지지 않은 유동적 설정

      ex)printf() - 공식API문서 printstream 확인가능

자료형... 변수명 // ...은 가변의미를 나타냄

 

※ 매개변수와 인수

public class Sample {
    int sum(**int a, int b**) {  // a, b 는 **매개변수**
        return a+b;
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        int c = sample.sum(**3, 4**);  // 3, 4는 **인수**

        System.out.println(c);  // 7 출력
    }
}

 

5) 표현식 종류 4가지

1)반환타입 o 매개변수 o 메소드

2)반환타입 o 매개변수 x 메소드

3)반환타입 x 매개변수 o 메소드

4)반환타입 x 매개변수 x 메소드

 

 


 

메소드와 생성자 구분법

구분기준 : 반환 여부

public Book() {

} // 반환타입이 없으므로 생성자

반환타입 o : 메소드

반환타입 x : 생성자

728x90
반응형
728x90

 

객체(Object)

 

객체 선언 및 호출

중괄호{}를 사용하여 객체를 생성하고, 속성에는 모든 자료형이 올 수 있음 객체는 키 값을 사용하여 속성 식별

 

<button onclick="test1();"> 객체 생성 </button>
<script>
    function test1(){
        var product = {         // 중괄호 { } : 객체
            pName: 'Dry Mango',
            type: 'pickle',
            ingredient:['mango', 'sugar'],
            origin: 'Philippines'
        };
        console.log(product);

 

 

 

객체 안의 속성 접근 2가지 방법

1)객체명['속성명']
2)객체명.속성명

1)객체명['속성명']

console.log(product['pName']);
console.log(product['type']);
console.log(product["ingredient"]);
console.log(product["origin"]);

2)객체명.속성명

console.log(product.pName);
console.log(product.type);
console.log(product.ingredient);
console.log(product.origin);

 

 

 

속성접근 방법 차이

방법2의 접근법은 키 안이 완벽한 상태여야 사용가능
띄어쓰기가 있으면 키 자체가 불완전해서 사용불가
띄어쓰기는 [ ] 대괄호 접근방법 사용

var objTest = {
    'k$ey':'value1',
    'k_ey':'value2',
    'k ey':'value3',
};

console.log(objTest['k$ey']);       //  객$체명
console.log(objTest['k_ey']);       //  객_체명
console.log(objTest['k ey']);       //  객 체명

console.log(objTest.k$ey);
console.log(objTest.k_ey);
//console.log(objTest.k ey);    //  에러 
// 키에 특수문자 대괄호로 감싸줘야함
// 키로써 모든게 완벽할 때 .쓸 수있지만, 띄어쓰기는 키 자체가 불완전하기 때문에 에러
// 띄어쓰기 쓸려면 []로 속성에 접근해야함

 

 

 

객체의 메소드 속성

function test2() {
    var satoori = {         // 중괄호{ } : JS의 객체
        area1:'전라도',     // area1:'전라도'을 필드라고 볼 수 있음
        area2:'경상도',
        song: function(act){    // 함수. song은 함수를 가지고 있기 때문에 메소드 역할을 함
            var area2 = '강원도'; 
            console.log(this.area1 + '와 ' + this.area2 + '는 ' + act); // 객체 안의 area1 ,area2, 매개변수로 받아온 act 출력
        }   // this를 붙이기 싫으면 변수 선언을 이 안에서 해줘야함.
    };      // this가 있어야 객체 안에있는 속성을 찾음. 
            // this를 붙이면 경상도, 안붙이면 강원도 

    satoori.song('사이가 좋다'); // area1 is not defined 에러
    // 객체를 변수satoori에 넣었고, 이 변수를 호출 했는데 에러발생
    // why? 
    // 객체 안에서 내 속성을 호출할 때는 반드시 앞에 this.가 들어가있어야함
    
    // 객체 내에서 쓰면 내 속성을 호출하는거기 때문에 
    // 여기에서는 객체 안에서 쓰면 외부에 있는 내 속성을 호출할 때 쓰는 것
    // this를 안붙이고 쓸려면 function(act)안에 area1,2가 존재해야한다
    // this가 있어야 객체 안에 속성을 찾음 -> 객체 안 함수의 내에서 함수 밖이자 객체 안의 속성값을 쓸려면 this를 붙여야한다
    
    // this 있으면 함수 외부(객체의 속성)
    // this 없으면 함수 내부

 

 


 

 

객체와 반복문

객체의 속성을 살펴볼때는 단순 for문으로는 불가능하고 for in문 사용해야함
‘배열’을 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 배열의 인덱스가 담김 ’객체’를 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 객체의 키가 담기게 됨.

function test3() {
    var movie = {
        title:'신비한 동물들과 덤블도어의 비밀',
        release: '2022-04-13',
        director: '데이빗 예이츠',
        mainActor: ['에디 레드메인','주드 로','매즈 미켈슨','댄 포글러','앨리슨 수돌'],
        screening : true
    };

// for in문에서 배열을 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 배열의 인덱스가 담김
// for in문에서 객체를 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 객체의 키가 담기게 됨  
    for(var i in movie) {
        console.log(i); // 객체의 key값들이 찍힘. title release director mainActor screening
        console.log(i + " : " + movie[i]); // i = 키값 + movie[i] = 밸류값
    }
    // 비어있는 객체
    // {}
}

 

 


 

 

객체 속성 추가 및 제거

처음 객체 생성 이후 속성을 추가하거나 제거하는 것을
'동적으로 속성을 추가/제거한다'라고 함

1)객체 속성 추가

// 설명
student.name                //스튜턴드의 네임을 가져오는 코드
student.name = '강건강';    //스튜턴드의 네임을 가져온 것에 강건강을 집어넣은 것
                            //속성도 만들어주고 값도 집어넣는 것

 

방법1

.으로 객체 안 속성 접근하는 방법

// 객체 속성 추가 방법1 : .으로 객체 안 속성 접근하는 방법
student.name = '강건강';    // {name:강건강} // key=name value='강건강'
	// student.name 코드는 원래는 스튜던트에있는 name을 가져오는거였는데,
	// = 으로 값을 대입하고 있으니
	// student라는 객체의 name 이라는 속성에 
	// 강건강을 집어넣음. 
	// 이런식으로 값도 넣을 수 있다는것임.
student.hobby = '운동'; // {hobby:운동}

 

방법2

대괄호[]로 객체 안 속성 접근하는 방법

function test4() {
    var student = {};   // 비어있는객체

		// 객체 속성 추가 방법2 : 대괄호[]로 객체 안 속성 접근하는 방법
		student['strength'] = '100m 달리기'; // 객체{} 안에 
    student['dream'] = '체육관 관장';    // 키값 'strength'와 밸류값 100m 달리기'를 추가
		
}

// 객체 속성 추가 완료 및 확인
console.log(student); // {name: '강건강', hobby: '운동', strength: '100m 달리기', dream: '체육관 관장'}
student.toString = function() { // toString이라는 메소드를 만들어주는것.  
  var str = '';               // 그 객체의 대표값을 나타내는구나 알수 있으니 toString으로 이름을 해주는것. 
  
  for(var key in this){       // this는 student를 의미함
      if(key != 'toString'){  // 강의시간 11:19   // if문 추가이유 : toString 빼고 나머지 넣으라고 
          str += key + " : " + this[key] + " // ";  // this[key] : student의 속성을 가져온다는 의미 ex)'운동','100m 달리기'
      }
  }
  return str;

오른쪽 파란색 드래그영역 부분을 제외하고 출력하기 위해서 if문의 조건을 넣은 것

 

2)객체 속성 제거

delete(변수명.키명);

delete(student.hobby); // delete(변수명.키명);
  • 후에 공부할 것 : hoisting & prototype이게 왜 일어났는지 이 상황을 이해하려면 prototype(콘솔에서 나오는 그 프로토타입)과 hoising 공부해야함js를 깊게 공부하고 싶다면 hoising,prototype 공부 // 몰라도 js 사용가능hoisting : 선언과 할당을 나눠서 하는 것분리한거에 따라서 undefined가 뜰 수 있는데 hoising 때문
  • 나중에 그 값들을 채워넣는 것. 분리해서 하는걸 hoising이라고 함
  • 선언하고 할당을 분리시키는 것
  • 프로토타입은 많이 어려워서 먼저 공부할거면 hoising만 추천
  • 위에 삭제하기 전 console.log 호출했을 때, hobby가 삭제된채로 출력된게 왜 그렇게 적용이 된건지

 

 


 

 

객체 배열

배열 추가 : Array.push(), Array.unshift(), Array.splice()
배열 삭제 : Array.pop(), Array.shift(), Array.splice()

function test5(){
	var student0 = {name: '강건강', java:85, oracle:13, HTML:94, CSS:53, js:99};
  var student1 = {name: '남나눔', java:39, oracle:55, HTML:52, CSS:78, js:47};
  var student2 = {name: '도대담', java:42, oracle:87, HTML:85, CSS:14, js:74};

	var students = [];
  students.push(student0);    // Array.push() : 배열 추가
  students.push(student1);
  students.push(student2);

	for(var i in students) {    // i의 값 : 배열의 인덱스 
    // 학생 과목 총점 도출 함수
    students[i].getSum = function(){ // students[i] : i번째 student객체
        var sum = 0;
        for(var key in this) {   // 객체 안에 들어왔으니 this
             if(key != 'name' && key != 'getSum' && key != 'getAvg') {
                sum += students[i][key];    // students[i] : 배열 안에 있는 i번째의 객체
                                            // students[i][key] key라고 하는 객체의 속성값을 가져오겠다는 코드
            // 숫자들의 합이니 name, getSum 을 빼고 더하겠다. 과목들의 합을 더해서 sum에 담음.
            }
        }
        return sum; // 과목들의 합을 담은 sum 리턴
    }    
    
    // 학생 평점 도출 함수
    students[i].getAvg = function(){    
        return this.getSum() / 5;
    }

    // 전체 데이터 출력 기능(@override toString 같은 역할)
    for(var i in students) {
        console.log('이름 : ' + students[i].name + ", 총점 : " 
                + students[i].getSum() + ", 평균 : " + students[i].getAvg());
    }
  }
}

 

728x90
반응형
728x90

배열의 메소드

indexOf()

해당 요소가 위치한 인덱스 번호 반환

없으면 -1반환

 

concat()

이어 붙이기

 

join()

결합해서 ‘문자열’로 반환

join()은 parameter 지정안

reverse()

배열의 값을 뒤집어서 반환

sort()

배열 값을 정렬 : 안에 들어온 값들을 문자열로 변환해서 문자열 정렬

push() & pop()

push : 마지막에 요소 추가 pop : 마지막 요소 꺼내오기(꺼내오며 마지막 요소가 배열에서 삭제됨)

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">

<title>Document</title>

</head>
<body>
    
    <script>
        // 배열의 메소드
        
        
        var a = ['a','b','c','4',5];
        console.log(typeof a); // object
        
        // indexOf()
        console.log(a.indexOf('a')); // 0 
        console.log(a.indexOf());    // 없으면 -1 반환
        
        // concat() 이어붙이기
        console.log(a.concat(6));    //  (6) ['a','b','c','4',5,6] 6추가됨
        
        // join
        console.log(a.join());      // a,b,c,4,5  
        console.log(typeof a.join());    //  str
        console.log(a.join("|"));    //  a|b|c|4|5
        console.log(a.join("a","q"));    //  aabaca4a5a


        // reverse
        console.log(a.reverse());    //  (5) [5, '4', 'c', 'b', 'a']
        
        // sort
        console.log(a.sort());    //  ['4', 5, 'a', 'b', 'c']


        // push : 마지막 요소에 추가
        console.log(a);           // (5) ['4', 5, 'a', 'b', 'c']
        console.log(a.push());    //  5     <- 콘솔에서는 소트된 상태에서 원래 배열의 마지막값 5를 반환
        console.log(a.push(6));    //  6    
        console.log(a);           // (6) ['4', 5, 'a', 'b', 'c',6]
        console.log(a.push())       // 6 // 파라미터 안적으면 배열의 길이 반환(?)
        console.log(typeof(a.push()));    //  number

        //pop
        console.log(a.pop());    //  6
        console.log(a);    //  (5) ['4', 5, 'a', 'b', 'c'] <- 6삭제됨
        console.log(a.pop(0));      // c
        console.log(a.pop("0"));    // b    매개변수를 넣어도 마지막요소 빼오고 삭제
        console.log(a);    //  (3) ['4', 5, 'a']  


       
    </script>


</body>
</html>

 

728x90
반응형
728x90

 

1)charAt ()

charAt(int index):char

받는 데이터의 원하는 인덱스번호의 자리 문자 하나를 반환

2) concat()

concat(String str):String

원래 문자열 끝에 매개변수로 들어온 값을 이어붙인 문자열 반환

3) equals()

equals(Object anObject):boolean

4)substring()

substring(int beginIndex):String

해당 인덱스 넘버부터 문자열 시작

substring(int beginIndex, int endIndex):String

5)replace()

replace(char oldChar, char newChar):String

A to B 사이의 문자열 일부 반환

public class practice_everyday01 {
	public static void main(String[] args) {	
		
		// String methods
		String str = "힘을 내라";
		
		// 1)charAt ()
		// charAt(int index):char
		char cheer = str.charAt(0);
		System.out.println("1."+cheer); // 힘
		
		// 2) concat()
		// concat(String str):String
		// 원래 문자열 끝에 매개변수로 들어온 값을 이어붙인 문자열 반환
		String cstr = str.concat(" cheer up");
		System.out.println("2."+cstr);
		
		
		// 3) equals()
		// equals(Object anObject):boolean
		System.out.println("3."+str.equals("equal"));
		
		// 4)substring()
		// substring(int beginIndex):String
		// 해당 인덱스 넘버부터 문자열 시작
		// substring(int beginIndex, int endIndex):String
		// A to B 사이의 문자열 일부 반환
		
		System.out.println("4.1."+str.substring(0,3));
		System.out.println("4.2."+str.substring(2));
		
		
		// 5)replace()
		// replace(char oldChar, char newChar):String
		
		System.out.println("5."+str.replace('힘','손'));
	}	
}
728x90
반응형
728x90

 

StringBuffer 안에 쓸 수 있는 많이 쓰는 메소드

append(),  insert(), delete(), reverse()

 

 

public class practice_everyday01 {
	public static void main(String[] args) {	
		
		// StringBuffer
		
		// 1) append()
		// 받아온 값을 뒤에 추가로 이어주는 메소드
		StringBuffer sb1 = new StringBuffer();
		sb1.append("a"); // str
		sb1.append('1'); // char
		sb1.append(2);   // int
		System.out.println(sb1); // 문자열 취급 더하기 a+1+2=a12
 		// a12
		
		// 2) insert()
		// 특정 인덱스번호에 문자열 삽입기능
		sb1.insert(1, "b");  	// 인덱스1 위치에 넣으면 원래 1에 있던 문자는 뒤로 밀려난다 
		sb1.insert(2, 'c');  	// 인덱스1 위치에 넣으면 원래 1에 있던 문자는 뒤로 밀려난다 
		System.out.println(sb1);// ""나 ''나 둘 다 작동
		//abc12
		
		// 3)delete 
		// delete(start, end-1)
		sb1.delete(3, 5);  		// end 숫자의 -1까지 삭제한다 1부터5라면 1부터4까지만 지운다
		System.out.println(sb1);
		// abc
		
		// 4)reverse
		sb1.reverse();  // 문자열을 거꾸로 돌려서 출력
		System.out.println(sb1);
		// cba
	}	
}
728x90
반응형
728x90

 

메소드 사용방식에서 클래스화 시키면서 정리정돈

  1. 새클래스 생성
  2. 관련 카테고리의 기존 메소드들을 새클래스 안으로 이주
  3. 기존 메소드들 앞에 클래스명 추가 : Accounting.

+@ 클래스를 따로 파일화해서 분리관리

 

목차

  1. 기존 메소드 방식 코드
  2. 클래스화된 코드

 

1.기존 메소드 방식 코드

public class OOP08_1 {
	 public static double valueOfSupply = 10000.0;
	 public static double vatRate = 0.1;
	 public static double  getVAT() {
		 return valueOfSupply * vatRate;
	 }
	 public static double getTotal() {
		 return valueOfSupply + getVAT();
	 }
	 public static void main(String[] args) {
		 System.out.println("Value of supply : " + valueOfSupply);
		 System.out.println("VAT : " + getVAT());
		 System.out.println("Total : " + getTotal());
	 }
 }

 

 

2.클래스화된 코드

class Accounting{
    public static double valueOfSupply;		// 공급가액	// 파라미터는 메인메소드 안에서 설정함
    public static double vatRate = 0.1;		// 부가가치세율
    public static double getVAT() {
        return valueOfSupply * vatRate;
    }
    public static double getTotal() {
        return valueOfSupply + getVAT();
    }
}

public class OOP08_1 {
	public static void main(String[] args) {
		
        Accounting.valueOfSupply = 10000.0;		// 공급가액 파라미터
        System.out.println("Value of supply : " + Accounting.valueOfSupply);
        System.out.println("VAT : " + Accounting.getVAT());
        System.out.println("Total : " + Accounting.getTotal());
	}
}
728x90
반응형
728x90

 

 

 

에러나는 코드 원문

class Accounting08_2{		// 인스턴스화
// 인스턴스 소속, static 제거
// static은 클래스소속이고 클래스가 인스턴스에 접근하면 에러나는건 어떤 인스턴스인지 모르기때문 a1?a2?
    public static double valueOfSupply;		
	public static double vatRate = 0.1;		
	public static double getVAT() {
	    return valueOfSupply * vatRate;
	}
	public static double getTotal() {
	    return valueOfSupply + getVAT();
	}
}

public class OOP08_2 {
	public static void main(String[] args) {
		
		Accounting08_2 a1 = new Accounting08_2();
        a1.valueOfSupply = 10000.0;
        
        Accounting08_2 a2 = new Accounting08_2();
        a2.valueOfSupply = 20000.0;
        
        System.out.println("Value of supply : " + a1.valueOfSupply);
        System.out.println("Value of supply : " + a2.valueOfSupply);
        
        System.out.println("VAT : " + a1.getVAT());
        System.out.println("VAT : " + a2.getVAT());
        
	}

}

 

728x90
반응형
728x90

 

JAVA 객체 지향 프로그래밍 - 3. 변수와 메소드

 

※이클립스 Refactor- extract method 기능

  - 자동으로 메소드 만들어주는 기능

 

 

이전 메소드 수업에서 3가지 형태를 좀 더 풀어서 설명하시는 듯함

 1.메소드

 2.클래스 소속 메소드

 3.인스턴스 소속 형태 메소드 

 

아래부터는 코드를 점점 개선해 나아갈 것인데 뭐가 문제점이고 어떻게 개선시키는지를 중점적으로 보자

 

OOP 03_1 : 변수와 메소드 - 메소드 호출 방식

메소드 생성하고 해당 메소드를 호출 & 메소드 한 줄마다 파라미터를 지정해줘야함

많은 양의 코드에서 일일히 다 수정하기가 불가능하기에 구분자만 바꿀 수 있도록 지정 해주는 것

// OOP 03_1 : 변수와 메소드

// 1.메소드
// 2.클래스 소속 메소드
// 3.인스턴스 소속 메소드

// 1.메소드
//
// 메소드 생성하고 해당 메소드를 호출 & 메소드 한 줄마다 파라미터를 지정해줘야함  
public class OOP03_1 {
	public static void main(String[] args) {
		
		printA();			
		printA();			
		printB();
		printB();	// 이 방식은 메소드 한줄마다 바꿔줘야함. 그래서 구분자 변수 지정(String delimiter = "----";) 하는 것
	}

	public static void printA() {
		// ... 1억줄 코드
		System.out.println("----"); // 여기서 구분자를 ----으로했지만
		System.out.println("A");	// 위 printA()에서 *로 하고 싶다면?
		System.out.println("A");	// 각각의 메소드에 파라미터 지정해주는 것
									// 옆 메소드에서 printA()에 타입,변수지정
									// 및 지정변수 println하고 
									// (메소드09번 수업1,2,3에서 변환한 그거인듯)
	}
	public static void printB() {
		// ... 1억줄 코드
		System.out.println("====");
		System.out.println("B");
		System.out.println("B");
	}
}

 


 

OOP 03_2 : 변수와 메소드 - 메소드 호출 + 구분자 방식

위의 03_1 방식에서 매 메소드마다 바꾸지 않아도 되게끔 따로 구분자만 변수 처리해서 한번만 바꾸도록 개선

// OOP 03_2 : 변수와 메소드

public class OOP03_2 {
	public static void main(String[] args) {
		
		// 1억줄 코드에 자주 구분자를 바꿔줘야한다면?
		// 변수를 지정해주자 ↓↓↓
		String delimiter = "----";
		printA(delimiter);			
		printA(delimiter);	
		
		delimiter = "====";
		printB(delimiter);
		printB(delimiter);			
	}

	public static void printA(String delimiter) {
		// ... 1억줄 코드
		System.out.println(delimiter); 
		System.out.println("A");	
		System.out.println("A");	
	}
	public static void printB(String delimiter) {
		// ... 1억줄 코드
		System.out.println(delimiter);
		System.out.println("B");
		System.out.println("B");
	}
}

 

 


 

OOP 03_3 : 변수와 메소드 - 메소드 호출 + 구분자 + 유효범위확장 방식

 

서비스를 하고 기능이 많아지면 여러 주제의 메소드도 늘어나고 메소드만 1억개라면...?

메소드를 주제별로 정리해줄 구원자가 class

 

인자로 변수를 주는 것도 싫다면?

메인 메소드 안 delimiter를 메소드 안에서 메소드 밖에 있는 delimiter값을 사용하면 됨. 다만, 유효범위 체크

 

delimiter 인식 순서 & 유효범위

메인 메소드 안에 delimiter 변수를 먼저 찾고 없으면, 이 파일 클래스 전체에서 찾는 것

printA() 메소드 안에 delimiter가 없다면, 이 파일 클래스(메인 메소드 위에)에서 찾아서 사용

// OOP 03_3 : 변수와 메소드

public class OOP03_3 {
	public static String delimiter = ""; 
	//메인 메소드 안 delimiter를 메소드 안에서 메소드 밖에 있는 delimiter값을 사용하게끔 지정
	public static void main(String[] args) {
		
		// 인자로 변수를 주는 것도 싫다면?
		// 
		
		// 메인 메소드 안 delimiter를 메소드 안에서 메소드 밖에 있는 delimiter값을 사용하면 됨
		// 다만, 유효범위 체크
		delimiter = "----";	// 이 delimiter = public static String delimiter = ""; 
		printA();			// 메인 메소드 안에 delimiter 변수가 없기에 이 파일 클래스 전체에서 찾는 것
		printA();	
		
		delimiter = "====";	// 이 방식은 구분자 하나만 바꿔주면 끝
		printB();
		printB();			// 이 방식은 메소드 한줄마다 바꿔줘야함. 그래서 구분자 변수 지정(String delimiter = "----";)
	}

	public static void printA() {
		// ... 1억줄 코드
		System.out.println(delimiter); // printA() 메소드 안에  delimiter가 없다면
		System.out.println("A");	   // 이 파일 클래스(메인 메소드 위에)에서 찾아서 사용
		System.out.println("A");	   // 
	}
	public static void printB() {
		// ... 1억줄 코드
		System.out.println(delimiter);
		System.out.println("B");
		System.out.println("B");
	}
	// public static String delimiter = ""; 
	// public static void printA() {
	// public static void printB() { 와 같이 연관성이 깊고 같은 주제 코드들이 모여있지만
	// 주제가 다 다른 코드들이 1억개라면 지옥 같이 복잡해짐
	// 이 상황에서 구원자는 class! 
	
}

 

 

728x90
반응형
728x90

 

JAVA 객체 지향 프로그래밍 - 1. 수업소개(객체지향+절차지향 개념)

 

메소드를 다른 컴퓨터 언어에서는

함수 = method = fuction = subroutine = procedural

 

절차지향 프로그래밍(procedural programming)의 패러다임은 procedural

즉, 자바에서는 메소드라고 불리우는 것을 이용해서 프로그램을 정리정돈하는 프로그래밍 기법

즉, 메소드를 이용해서 작은 부품을 만들고 이것을 결합해서 더 큰 부품을 만들어가는 테크닉이 procedural programming

 - 많은 컴퓨터 언어가 이 패러다임을 따르고 있고, 대표적인 언어가 C

 

but 몇몇 엔지니어들은 메소드만 가지고는 프로그램을 만드는데 부족함을 느끼고 서로 연관된 메소드와 변수들을 모아서 그루핑하고 이름을 붙여서 정리정돈 하고 싶어졌다. 그래서 만들어진 수납상자가 클래스(class)

클래스를 중심으로 프로그램의 구조를 만들어가는 컴퓨터 프로그래밍 방법론을 객체지향 프로그래밍 또 이런 방법론을 언어 차원에서 제공하는 것객체지향 언어라고 한다. 객체지향의 개념을 편협하게 설명한 내용들

 

클래스

메소드와 변수를 그루핑하고 이름을 붙인 것

728x90
반응형
728x90

 

1.메소드 형태

 

 

2.클래스 소속 메소드 형태

 

 

3.인스턴스 소속 클래스 형태

마지막 결과값 중 null은

last3();에서 구분자 안줘서 null

728x90
반응형

+ Recent posts