본문 바로가기

Java

(22)
Java- 문자열 결합의 최적화(StringBuilder 클래스) String에서의 '+' 연산의 해석 String s1 = "닭고기" + 'a' + 123 + 77.1 //s1 = "닭고기a12377.1" 문자열을 '+'연산자로 연결을 하게된다면 뒤에 연결되는 자료형에 관계없이 그냥 뒤에 갖다 붙이는 식으로 연결이된다. 단순히 뒤에 붙이는 구조인데 컴파일러는 이를 다음과 같이 해석한다고 추정해볼 수 있다.. String s1 = "닭고기".concat(String.valueOf('a')).concat(String.valueOf(123)).concat(String.valueOf(77.1)) 참고로 concat( ) 함수는 문자열 뒤에 문자열을 붙이는 함수이고, String.valueOf( ) 함수는 타 자료형을 문자열로 바꿔주는(다시말해 타 자료형과 똑같이 생긴 Str..
Java- 메소드 오버로딩과 this 오버로딩 조건 -매개변수 개수 void simpleFunc(int i)와 void simpleFunc(int i1, int i2)는 오버로딩된다. -매개변수 타입 void simpleFunc(int i)와 void simpleFunc(String s)는 오버로딩된다. -반환형은 오버로딩 조건이 아님 void simpleFunc(int i)와 int simpleFunc(int i)는 오버로딩 불가하다. this를 통한 생성자 오버로딩 class Person{ private int regiNum; private int passNum; Person(int rNum, int pNum){ regiNum = rNum; passNum = pNum; } Person(int rNum){ //생성자 오버로딩 this(rN..
Java- main 메소드 main 메소드 main의 위치 자바를 보면 모든 메소드들이 기본적으로 클래스 내부에 선언되고 있음을 볼 수 있다. 그렇기에 메소드인 main도 특정한 클래스 내부에 선언이 되어야 함을 이해할 수 있는데, 이때 "main이 선언되는 클래스의 위치는 중요하지 않다". 즉, 다시말해 어느 클래스에든 선언이 가능하다는 것이다. 그 이유는 main이 static 선언이 되었기 때문이다. static 선언(클래스 메소드)는 인스턴스 안에 속해 있지 않다는 특성 때문에 사실상 해당 클래스와는 별개로 볼 수 있기 때문이다. 그럼에도 불구하고 main을 위한 특정 클래스를 따로 정의하는 것이 일반적이다.
Java- 클래스 변수와 클래스 메소드, static 클래스 변수와 인스턴스 변수 클래스를 선언하면 내부에 수많은 인스턴스 변수(일반적인 클래스 멤버 변수)를 선언하게 된다. 그리고 클래스 변수란 static 선언된 변수를 의미한다. 일반적인 변수들과는 달리 클래스 변수는 하나의 메모리 공간에 존재하면서 단지 클래스의 인스턴스들이 해당 변수에 접근할 권한이 존재하는 것뿐이다. 따라서 클래스 변수는 모든 인스턴스들이 동시에 공유하는 변수라고 생각하면 편하다. 클래스 변수란... -인스턴스 생성 이전부터 접근이 가능하다. -어느 인스턴스에도 속하지 않는다. 클래스 변수에 접근하기 클래스 내부에서 접근 -클래스 변수 이름 클래스 외부에서 접근 -인스턴스 이름.클래스 변수 이름 class AccessWay{ //클래스 내부 static int num = 0; Ac..
Java- 접근 지시 제어자 인스턴스 멤버의 public과 default 선언이 갖는 의미 타 패키지에서의 접근 여부 -public: 어디서든 접근이 가능 -default: 동일 패키지로 묶인 클래스 내에서만 접근이 가능하다. public 선언된 해당 클래스나 메소드는 타 패키지에서 접근이 가능하다. 클래스가 public 선언이 되었다면 해당 클래스는 다른 패키에 있는 파일에서 import 가능하다. 클래스 메소드 타 패키지 파일에서의 접근 여부 public public import 가능 / 메소드 접근 가능 public default import 가능 / 메소드 접근 불가 default public import 불가 default default import 불가 지금 아래의 두 코드는 서로 다른 package에 선언이 되어있다. ..
Java- 생성자 생성자 선언 사실 생성자의 생성 규칙도 C++과 매우 비슷하다. class BankAccount { String accNumber; //계좌번호 String ssNumber; //주민번호 int balance = 0; //클래스 내부에 존재하는 변수: 인스턴스 변수 public BankAccount(String acc, String ss, int ba){ //생성자 accNumber = acc; ssNumber = ss; balance = ba; } } public 클래스명( ){ ... }이 생성자의 생성 규칙이다. C++과 차이점이라면 앞에 public을 따로 명시해준다는 차이밖에는 없다. 반환형이 없다는 점도 동일하다.