다잇소


[IT/트랜드] Java 기초 – ④ ( Method)

2017.08.31
 


  1. Method


1.         Java의 접근자


– public : class, instance variable, method


– protected : class(내부), instance variable, method


– default(생략한 경우) : class, ), instance variable, method


private : class(내부), instance variable, method










































접근자



외부 package



자식 type



동일 package



class내



public



접근 가능



접근 가능



접근 가능



접근 가능



protected



접근 불가능



접근 가능



접근 가능



접근 가능



default



접근 불가능



접근 불가능



접근 가능



접근 가능



private



접근 불가능



접근 불가능



접근 불가능



접근 가능



 


2.         method 선언










modifiers returnType methodName(parameters) throws clause {


statements


}



modifiers : public, private, protected, static, final, abstract, native, synchronized


return type : 기본형, object type, 배열 , void(반환하는 값이 없음)


    code block에서 return 함께 일치하는 type를 반환하여야 함


– methodName : method의 식별자 이름


params : 변수 선언과 동일한 형태로 선언


 예) int i, int [] intAry, String string, Dog dog


throws 절 : 예외 사항을 호출한 method로 위임


예) throws IOException, FileNotFoundException


    – method 식별은 methodName과 Parameters 구분(overload)










public void methedName() {


}


 


//method Parameter 같으므로 같은 식별이 되지 않음


public int methedName() {


return 10;


}


 


// method Parameter 같으므로 같은 식별이 되지 않음


public static void methedName( ) {


}


 


// method명은 같지만, Parameter 다르므로 다른 method 식별이


public void methedName(int i, String str ) {


}



 


3.         은폐(Encapsulation)


1 ) 특징


– data(status)를 숨기는 것


– 유연성(Flexibility): 변경이 있을 경우, 어렵지 않게 변경이 가능함.


– 재사용성(Reusability) : object에서 요청(상속) 될 때, 전체나 일부분을 다시 사용이 가능함


– 유지보수용이(Maintainability): 내부를 변경하더라도, 외부에 영향을 끼치지 않거나, 크지 않아 유지 보수가 용이.


 


2 ) getter와 setter


– Instance Variable에 method로 접근하는 방법


– 접근자나 일부 method를 제공하지 않으므로 접근을 제한이 가능


– 많은 solution들이 getter와 setter을 지원함


– getter와 setter만 있는 class를 POJO 또는 VO(value object)라고 명명


– 명명 규칙 : type getName(=boolean인 경우는 isName) ,setName(type name)










private double speed;


 


public double getSpeed() {


return speed;


}


 


public void setSpeed(double speed) {


if( speed> 100 ) {


this.speed = 100;


}


else {


this.speed = speed;


}


}


 


public boolean isWild() {


return (speed> 70);


}



 


4.         method 호출


1) 호출


static아닌 경우 objectName.methodName


– static경우 ClassName.methodName


Dog.java










public void bark() {


if( weight > 20 ) {


System.out.println(으르렁 으르렁);


}


else {


System.out.println(멍멍);


}


}


 


public static void bark(int level) { // Method


switch(level) {


case 1:


System.out.println(멍멍);


break;


case 2:


System.out.println(으르렁 으르렁);


break;


case 3:


System.out.println(으르렁 왈왈);


break;


default:


System.out.println(깨갱);


break;


}


}



DogDrive.java










Dog dog = new Dog();


dog.bark();


Dog.bark(2);



2) Pass By Value


Parameter는 Pass By Value로 변수의 값을 Parameter에 복사하여 전달


– 기본형인 경우 값을 복사하여 전달, method에 변경이 반영 되지 않음


– 객체형인 경우 참조 값을 복사하여 전달, method에 변경된 값이 반영










package com.kds.java.basic.char02;


 


public class PassByValueTest {


 


public static void main(String[] args) {


int i = 10;


Dog dog = new Dog();


dog.name = 바둑이;


 


PassByValueTest passByValueTest = new PassByValueTest ();


passByValueTest.testPassByValue(i, dog);


System.out.println(“Integer =>” + i);


System.out.println(“Dog =>” + dog.name);


}


 


public void testPassByValue(int i, Dog dog) {


i = 11;


dog.name = “Shally”;


}


}



– 결과를 예상 해 보세요


5.         Constructor(생성자)


– Class이름과 같은 이름을 가진 method로써 Parameter를 가질 수 있지만, 반환 값을 가질 수 없음


– public , protected, private 접근자 keyword 모두 사용 가능


– 생성자는 다른 생성자와 다른 method 호출이 가능


– class내에 생성자가 없는 경우에는 default 생성자 publc className()이 만들어짐


– new라는 키워드를 이용하여, Object를 초기화하기 위해 사용


– Object 자신을 가리킬 때는 this를 사용.


– Parameter난 지역 변수가 동일한 이름을 가질 경우 this.variableName으로 형식으로 구분 할 수 있음










package com.kds.java.basic.char02;


 


public class Dog {


private double size;


private double weight;


private String breed;


private double speed;


public Dog(double size, double weight) {


this.size = size;


this.weight = weight;


breed = 치와와;


speed =10;


}


protected Dog(double size) {


this(size, 3);


setSpeed(150);


}


private Dog(String breed) {


size = 10;


weight = 3;


this.breed = 치와와;


speed =10;


}


 


public double getSpeed() {


return speed;


}


 


public void setSpeed(double speed) {


if (speed > 100) {


this.speed = 100;


} else {


this.speed = speed;


}


}


}



다음에서 바르지 않은 object 생성 방법을 찾으세요.










package com.kds.java.basic.char02;


 


public class DogDrive {


public static void main(String[] args) {


Dog 바둑이 = new Dog();


바둑이 = new Dog(10);


바둑이 = new Dog(10,3);


바둑이 = new Dog(진돗개);


}


}



 


※ Quiz


1. 다음 PassByValueTest.java를 compile하고 , 실행 후에 결과를 확인하고, Pass By Value 가 적용이 되지 않는 객체가 있습니다. 무엇이고 왜 그런지 찾아 보기 바랍니다.










package com.kds.java.basic.char02;


 


public class PassByValueTest {


public static void main(String[] args) {


int i = 10;


String str = “ABC”;


Dog dog = new Dog();


dog.name =바둑이;


int [] iArray = new int[5];


String [] strArray = new String[5];


for( int j= 0; j < iArray.length;j++) {


iArray[j] = (j+1);


strArray[j] = (j+1) + “”;


}


PassByValueTest passByValueTest = new PassByValueTest();


passByValueTest.testPassByValue(i, str,dog, iArray, strArray);


System.out.println(“Integer =>” + i );


System.out.println(“String =>” + str );


System.out.println(“Dog =>” + dog.name );


System.out.println(“Integer 배열 );


for( int j= 0; j < iArray.length;j++) {


System.out.println(iArray[j]);


}


System.out.println(“String 배열 );


for( int j= 0; j < strArray.length;j++) {


System.out.println(strArray[j]);


}


}


 


public void testPassByValue(int i,String str, Dog dogint [] iArray, String [] strArray ) {


i = 11;


str = “abc”;


dog.name =“Shally”;


for( int j=0; j < iArray.length;j++) {


iArray[j] = (j+1)*2;


strArray[j] = ((j+1)*2)+ “”;


}


}


}



 


2. 다음 프로그램의 출력 값을 예측 해 보기 바랍니다..










package com.kds.java.basic.char02;


 


public class ConstructorTest {


 


public static void main(String[] args) {


ConstructorTest1 constructorTest1 = new ConstructorTest1();


ConstructorTest2 constructorTest2 = new ConstructorTest2();


ConstructorTest3 constructorTest3 = new ConstructorTest3(15);


System.out.printf(“constructorTest1 i=>%d, constructorTest2 i=>%d,constructorTest3 i=>%d\n”,


constructorTest1.i , constructorTest2.i, constructorTest3.i );


}


}


 


class ConstructorTest1 {


int i = 10;


}


 


class ConstructorTest2 {


int i = 10;


ConstructorTest2() {


i = 20;


}


}


 


class ConstructorTest3 {


int i = 10;


ConstructorTest3(int i) {


i = i;


}


}



 


 




 




설정된 프로필 사진이 없습니다.
| Wise리더
관심분야 IT,여행,맛집

카테고리 레이어 닫기